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

news2024/9/22 21:16:39

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加群”

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构与算法】排序算法:冒泡排序,冒泡排序优化,选择排序、选择排序优化

目录 一、冒泡排序 1、冒泡排序思想 2、冒泡排序算法的性能分析 代码实现&#xff1a; 二、选择排序 1、选择排序思想 2、选择排序算法的性能分析 代码实现&#xff1a; 一、冒泡排序 1、冒泡排序思想 冒泡排序的基本思想是通过相邻元素之间的比较和交换来逐步将最大…

前端JavaScript篇之实现有序数组原地去重方法有哪些?

目录 实现有序数组原地去重方法有哪些&#xff1f;方法一&#xff1a;使用 Set 数据结构代码实现&#xff1a;思路说明&#xff1a; 方法二&#xff1a;使用双指针遍历代码实现&#xff1a;思路说明&#xff1a; 实现有序数组原地去重方法有哪些&#xff1f; 在 JavaScript 中…

Dockerfile-xxxx

1、Dockerfile-server FROM openjdk:8-jdk-alpine WORKDIR /app COPY . . CMD java -Xms1536M -Xmx1536M -XX:UseG1GC -jar -Dlog4j2.formatMsgNoLookupstrue -Dloader.pathresources,lib -Duser.timezoneGMT-05 /app/server-main-1.0.0.jar 2、Dockerfile-bgd #FROM openjdk…

(笔记总结)C/C++语言的常用库函数(持续记录,积累量变)

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

代码+视频R语言绘制逆概率加权后的基线表

基于 PS &#xff08;倾向评分&#xff09;的逆概率加权(IPTW )法首先由&#xff32;osenbaum作为一种以模型为基础的直接标准化法提出&#xff0c;属于边际结构模型。简单来说&#xff0c;就是把许多协变量和混杂因素打包成一个概率并进行加权&#xff0c;这样的话&#xff0c…

Android双指缩放ScaleGestureDetector检测放大因子大图移动到双指中心点ImageView区域中心,Kotlin

Android双指缩放ScaleGestureDetector检测放大因子大图移动到双指中心点ImageView区域中心&#xff0c;Kotlin 在 Android双击图片放大移动图中双击点到ImageView区域中心&#xff0c;Kotlin-CSDN博客 基础上&#xff0c;这次使用ScaleGestureDetector检测两根手指的缩放动作&a…

开源人工智能AI壁纸生成器--AI Wallpaper Generator

AI Wallpaper Generator AI Wallpaper Generator&#xff1a;AI Wallpaper Generator | AI Wallpaper Shop GitHub地址&#xff1a;https://github.com/all-in-aigc/aiwallpaper 一款开源人工智能AI壁纸生成器&#xff0c;根据用户的输入提示词&#xff0c;即可生成对应的高…

Python Tornado 实现SSE服务端主动推送方案

一、SSE 服务端消息推送 SSE 是 Server-Sent Events 的简称&#xff0c; 是一种服务器端到客户端(浏览器)的单项消息推送。对应的浏览器端实现 Event Source 接口被制定为HTML5 的一部分。相比于 WebSocket&#xff0c;服务器端和客户端工作量都要小很多、简单很多&#xff0c…

使用Bitcoin Core钱包启动signet测试网络

使用Bitcoin Core钱包启动signet测试网络 为什么要启动测试网络 我们的目的是了解BTC网络的运行原理&#xff0c;学习BTC相关技术。在主网中有较高的手续费和大量的区块数据&#xff0c;不利于我们进行测试。 下载钱包 一定要去可信的网站下载钱包&#xff0c;否则非常容易…

java web servlet 学习系统进度管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web学习系统进度管理系统是一套完善的java web信息管理系统 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环 境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为…

go语言(十四)----反射

变量的结构 2 举个例子 package mainimport "fmt"type Reader interface {ReadBook() }type Writer interface {WriteBook() }//具体类型 type Book struct {}func (this *Book) ReadBook() {fmt.Println("Read a Book")}func (this *Book) WriteBook() {…

Mac上如何设置映射某个网站站点域名的IP

最近某常用的站点换 IP 了&#xff0c;但是 DNS 服务器还没有修改&#xff0c;这就导致无法访问&#xff08;换 DNS 服务器也不行&#xff09;。在用了一段时间的 IP 访问之后&#xff0c;还是没好&#xff0c;不知道是 DNS 污染还是咋了&#xff0c;所以最后还是手动改一下吧。…

【LeetCode】每日一题 2024_1_22 最大交换(模拟)

文章目录 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01;题目&#xff1a;最大交换题目描述&#xff1a;代码与解题思路 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01; 几百年没有见到题目描述这么短的题目了&#xff0c;泪目了 题目&#x…

电商平台接口自动化框架实践

技术栈 Mimproxy(抓包)pytestalluredockerJenkinsgitlab 语言&#xff1a;电商API接口自动化实现流程 红色为可实现/尚未完成 绿色为需要人工干预部分 自动生成测试用例模板&#xff08;俩种方式二选一&#xff09;&#xff1a; mimproxy&#xff0c;通过浏览器代理抓包方式…

074:vue+mapbox 加载here地图(影像瓦片图 v2版)

第074个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中加载here地图的影像瓦片图 v2软件版本。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共77行)相关API参考:专栏目标示例效果

区块链游戏:Web3时代玩法的全新演绎

随着区块链技术的蓬勃发展&#xff0c;区块链游戏正成为数字娱乐领域的一颗璀璨明珠。在Web3时代&#xff0c;区块链游戏以其去中心化、透明、可验证的特性&#xff0c;为玩家带来了全新的游戏体验。本文将深入探讨区块链游戏在Web3时代的崭新玩法和引领未来的可能性。 1. 去中…

GPTBots:利用FlowBot中的卡片和表单信息,提供丰富的客服体验

在当今的数字化时代&#xff0c;客户服务的形式和体验正在经历着前所未有的变革。传统的文字消息方式已经无法满足现代用户对于服务体验的多元化需求。那么&#xff0c;如何才能在这个信息爆炸的时代&#xff0c;让我们的服务方式更加个性化、多样化&#xff0c;从而提供更丰富…

分享一个“产业级,开箱即用”的NLP自然语言处理工具

NLP的全称是Natuarl Language Processing&#xff0c;中文意思是自然语言处理&#xff0c;是人工智能领域的一个重要方向 自然语言处理&#xff08;NLP&#xff09;的一个最伟大的方面是跨越多个领域的计算研究&#xff0c;从人工智能到计算语言学的多个计算研究领域都在研究计…

记录一次从有道云笔记迁移到语雀笔记

推荐阅读 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;一&#xff09; 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;二&#xff09; 1、安装git&#xff0c;python3等准备工作 文章中标注python3&#xff0c;为避免与python2 冲…

【正点原子STM32】C语言重点知识(配置MDK支持C99、位操作清零置一、带参数的宏定义、头文件的条件编译和代码条件编译、关键字、结构体指针、代码规范)

一、stdint.h简介 配置MDK支持C99 二、位操作 如何给寄存器某个位赋值&#xff08;清零置一&#xff09; 三、宏定义 带参数的宏定义 四、条件编译 头文件的条件编译和代码条件编译 五、extern声明 六、类型别名(typedef) 类型别名应用 七、结构体 应用举例&#xf…