最长子字符串的长度(二) - 华为OD统一考试

OD统一考试(C卷)

分值: 200分

题解: Java / Python / C++

alt

题目描述

给你一个字符串 s,字符串s首尾相连成一个环形 ,请你在环中找出’l’、‘o’、‘x’ 字符都恰好出现了偶数次最长子字符串的长度。

输入描述

输入是一串小写的字母组成的字符串。

输出描述

输出是一个整数。

补充说明

  • 1 <= s.length <= 5 x 10^5
  • s 只包含小写英文字母。

示例1

输入:
alolobo

输出:
6

说明:
最长子字符串之一是 "alolob",它包含 'l','o'各 2 个,以及 0 个 'x' 。

示例2

输入:
looxdolx

输出:
7

说明:
最长子字符串是 "oxdolxl",由于是首尾连接在一起的,所以最后一个 'x' 和开头的 'l'是连接在一起的,此字符串包含 2 个 'l' ,2个 'o' ,2个 'x' 。

示例3

输入:
bcbcbc

输出:
6

说明:
最长子字符串 "bcbcbc"。

题解

使用一个整数 status 代表状态(状态压缩):

  • 第 0 位为 1 表示 l 出现奇数次;
  • 第 1 位为 1 表示 o 出现奇数次;
  • 第 2 位为 1 表示 x 出现奇数次;

这样当 l, o, x 都为偶数时 status = 0。

然后双层循环寻找符合条件的最大子字符串长度。

时间复杂度: O(n^2)

Java

import java.util.Scanner;
/**
 * @author code5bug
 */
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String in = scanner.next();

        int len = in.length();
        int max_len = 0;
        for (int i = 0; i < len; i++) {
            for (int j = i, status = 0; j < i + len; j++) {
                char c = in.charAt(j % len);

                if (in.charAt(i) == 'l') {
                    status ^= 1;
                } else if (in.charAt(i) == 'o') {
                    status ^= 2;
                } else if (in.charAt(i) == 'x') {
                    status ^= 4;
                }

                // 'l'、'o'、'x' 字符都恰好出现了偶数次
                if (status == 0) {
                    max_len = Math.max(max_len, (j - i + 1));
                }
            }
        }

        System.out.println(max_len);
    }
}

Python

in_str = input()

len_str = len(in_str)
max_len = 0

for i in range(len_str):
    for j in range(i, i + len_str):
        c = in_str[j % len_str]

        status = 0
        if in_str[i] == 'l':
            status ^= 1
        elif in_str[i] == 'o':
            status ^= 2
        elif in_str[i] == 'x':
            status ^= 4

        # 'l'、'o'、'x' 字符都恰好出现了偶数次
        if status == 0:
            max_len = max(max_len, (j - i + 1))

print(max_len)

C++

#include <iostream>
#include <string>
using namespace std;

int main() {
    string in;
    cin >> in;

    size_t len = in.length();
    int max_len = 0;
    for (int i = 0; i < len; i++) {
        for(int j = i, status = 0; j < i + len; j++) {
            char c = in[j % len];

            if(in[i] == 'l') status ^= 1;
            else if(in[i] == 'o') status ^= 2;
            else if(in[i] == 'x') status ^= 4;

            // 'l'、'o'、'x' 字符都恰好出现了偶数次
            if(status == 0) { 
                max_len = max(max_len, (j - i + 1));
            }
        }
    }

    cout << max_len << endl;

    return 0;
}

相关练习题

题号题目难易
LeetCode 13711371. 每个元音包含偶数次的最长子字符串中等

‍❤️‍华为OD机试面试交流群每日真题分享): 加V时备注“华为od加群”

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/341871.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

保护隐私数据:使用Java `transient`关键字

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 保护隐私数据&#xff1a;使用Java transient关键字 前言什么是java对象序列化transient关键字的基础知识序列化与反序列化过程避免transient的陷阱 前言 在数字时代&#xff0c;数据安全至关重要。无…

单片机中MCU跑RTOS相比裸机的优势

经常有读者问关于RTOS的问题&#xff0c;比如&#xff1a;我现在要不要学习RTOS&#xff1f; 学习RTOS有什么好处&#xff1f; 我的项目要不要跑RTOS&#xff1f; 问这些问题&#xff0c;其实归根结底还是对RTOS理解的不够&#xff0c;项目开发的经验还不足等。针对这部分朋友…

JVM系列-4.类加载器

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring原理、JUC原理、Kafka原理、分布式技术原理、数据库技术、JVM原理&#x1f525;如果感觉博主的文…

RK3568平台 TinyAlsa集成第三方音频算法

一.tinyalsa介绍 ALSA&#xff08;Advanced Linux Sound Architecture&#xff09;是一个开源项目&#xff0c;涵盖了用户空间和内核空间对音频设备的操作接口&#xff0c;通过应用层使用alsalib可以实现对音频设备的控制 TinyAlsa是android推出的一个精简的ALSA库&#xff0c…

美易官方《惊爆财务丑闻,有空头已经赚了十倍》

惊爆财务丑闻&#xff0c;“四大粮商”之首ADM股价暴跌&#xff0c;有空头已经赚了十倍 近日&#xff0c;一起惊爆市场的财务丑闻让全球投资者为之震惊。作为全球最大的农业综合企业之一&#xff0c;“四大粮商”之首的ADM&#xff08;Archer Daniels Midland&#xff09;被曝涉…

PLC从HTTP服务端获取JSON文件,解析数据到寄存器

智能网关IGT-DSER集成了多种PLC协议&#xff0c;方便实现各种PLC与HTTP服务端之间通讯。通过网关的参数配置软件绑定JSON文件的字段与PLC寄存器地址&#xff0c;配置URL&#xff0c;即可采用POST命令&#xff0c;将JSON文件提交给HTTP的服务端&#xff1b; 服务端有返回的JSON&…

【Linux系统编程三十】线程池实现

线程池实现 一.线程池的本质二.类内创建线程三.代码实现 一.线程池的本质 线程池里面存储的都是一批已经创建好的线程&#xff0c;当线程池里有数据时&#xff0c;这批线程就会被唤醒去竞争数据&#xff0c;当线程池里没有数据时&#xff0c;这批线程就去休眠等待。 线程池的…

基于SpringBoot Vue汽车租赁系统

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…

QTableWidget 双击单元格修改数据

本章介绍通过双击单元格&#xff0c;进入单元格&#xff0c;进行编辑&#xff0c;并对比是否修改了数据&#xff0c;如果修改了更新到数据库。 其他关于QTableWidget的操作&#xff0c;请查看上一篇文章《QTableWidget 用法-CSDN博客》 修改单元格内容&#xff0c;与原值比较…

jQuery鼠标事件、键盘事件、浏览器事件

鼠标事件 1、.click( ): 点击事件 html文档 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><script src"jQuery.js"></script></head><body><p>haha 1</p&g…

C++面试宝典第23题:乌托邦树

题目 乌托邦树每年经历2个生长周期。每年春天,它的高度都会翻倍。每年夏天,他的高度都会增加1米。对于一颗在春天开始时种下的高为1米的树,问经过指定周期后,树的高度为多少? 输入描述:输入一个数字N(0 <= N <= 1000),表示指定周期。 比如:样例输入为3。 输出描…

web开发学习笔记(13.mybatis基于注解配置)

1.使用mybatis基本步骤 2.引入依赖 <!-- mysql--><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency> <!-- mybatis--><dependency><groupId>org…

信息检索与数据挖掘 | (七)概率检索模型

文章目录 &#x1f4da;基本概率论知识&#x1f4da;概率排序原理PRP-probability ranking principle&#x1f4da;二值独立模型BIM-Binary Independence Model&#x1f4da;Okapi BM25模型 出于一些追求完整性的强迫症&#xff0c;开始做考完试了梳理知识点博客的离谱行为&…

【目标检测】YOLOv7算法实现(二):正样本匹配(SimOTA)与损失计算

本系列文章记录本人硕士阶段YOLO系列目标检测算法自学及其代码实现的过程。其中算法具体实现借鉴于ultralytics YOLO源码Github&#xff0c;删减了源码中部分内容&#xff0c;满足个人科研需求。   本篇文章在YOLOv5算法实现的基础上&#xff0c;进一步完成YOLOv7算法的实现。…

分布式深度学习中的数据并行和模型并行

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

HQL,SQL刷题简单查询,基础,尚硅谷

今天刷SQL简单查询&#xff0c;大家有兴趣可以刷一下 目录 相关表数据&#xff1a; 题目及思路解析&#xff1a; 总结归纳&#xff1a; 知识补充&#xff1a; 关于LIKE操作符/运算符 LIKE其他使用场景包括 LIKE模糊匹配情况 相关表数据&#xff1a; 1、student_info表 2、sc…

Centos7 安装redis 详细步骤访问不了github和windows系统下载

windows系统下载 https://hellowindows.cn/ VMware虚拟机安装Windows Server 2016 VL https://blog.csdn.net/qq_37545849/article/details/134828341 VMware全屏时不显示上方命令栏的边缘 此时如果要返回&#xff0c;可以把鼠标移动至屏幕上方边缘短暂停留以呼出命令栏。或使…

龙芯3A6000_通过xrdp远程访问统信UOS

原文链接&#xff1a;龙芯3A6000|通过xrdp远程访问统信UOS hello&#xff0c;大家好&#xff01;今天我带给大家的是一篇实用性极强的技术文章——通过xrdp远程访问装载在龙芯3A6000上的统信UOS操作系统。这意味着&#xff0c;无论您使用的是Windows、MACOS还是Linux操作系统&a…

测试 yolov8 分割模型 边缘检测

发现 cfg/default.yaml 参数 mask_ratio 等于4 直接训练如下边缘分割标签,推理时mask 稀疏&#xff0c;训练时分数偏低,mask_ratio 改为1训练时打印的mask 的 P指标一直为0,将imgsz原图size 训练分数也不高 标注用的是labelme多边形 阅读源码发现可能是因为mask缩放导致 且出现…

分类预测 | Matlab实现LSTM-Attention-Adaboost基于长短期记忆网络融合注意力机制的Adaboost数据分类预测/故障识别

分类预测 | Matlab实现LSTM-Attention-Adaboost基于长短期记忆网络融合注意力机制的Adaboost数据分类预测/故障识别 目录 分类预测 | Matlab实现LSTM-Attention-Adaboost基于长短期记忆网络融合注意力机制的Adaboost数据分类预测/故障识别分类效果基本描述程序设计参考资料 分类…