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

OD统一考试(C卷)

分值: 100分

题解: Java / Python / C++

alt

题目描述

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

输入描述

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

输出描述

输出是一个整数

示例1

输入
alolobo

输出
6

说明
最长子字符串之一是“alolob”,它包含'o'2个

示例2

输入
looxdox

输出
7

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

示例3

输入
bcbcbc

输出
6

说明
这个示例中,字符串“bcbcbc”本身就是最长的,因为o'都出现了0次

题解

这是一个字符串处理问题,需要找出一个环形字符串中字符出现偶数次最长子字符串的长度。

思路

  1. 首先统计字符串中字符'o'的出现次数。
  2. 如果字符'o'的出现次数是偶数,那么最长子字符串的长度就是整个字符串的长度。
  3. 如果字符'o'的出现次数是奇数,那么最长子字符串的长度就是整个字符串长度减1。

C++

#include <iostream>
using namespace std;

int main(){
    string s;
    cin >> s;
    int cnt = 0;
    for(char c : s) if(c == 'o') cnt++;

    int rs = (cnt % 2 == 0) ? s.length() : s.length() - 1;
    cout << rs << endl;
    return 0;
}

Java

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();
        int cnt = 0;
        for (char c : s.toCharArray()) if (c == 'o') cnt++;
        int rs = (cnt % 2 == 0) ? s.length() : s.length() - 1;
        System.out.println(rs);
    }
}

Python

from collections import Counter
s = input()
cnt = Counter(s)
print((len(s) if cnt['o'] % 2 == 0 else len(s) - 1))

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

#校招##秋招##面经##java##华为#
全部评论
原题
2 回复 分享
发布于 2023-12-29 02:39 广东
原题
2 回复 分享
发布于 2023-12-27 17:16 湖北
有更好的解法,欢迎评论区留下, 大家有笔试真题欢迎投稿,祝大家
点赞 回复 分享
发布于 2023-12-26 11:50 湖北
为啥默认是判断o呢,是不是写错了
点赞 回复 分享
发布于 2023-12-14 17:22 广东

相关推荐

06-23 11:43
门头沟学院 Java
allin校招的烤冷...:我靠,今天中午我也是这个hr隔一个星期发消息给我。问的问题还是一模一样的😅
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-29 17:30
找实习找着找着就要进入7月了,马上秋招也要开始了,找实习还有意义吗?
绝迹的星:有面就面, 没面上就当日薪4位数大佬免费培训, 面上了再考虑要不要实习
点赞 评论 收藏
分享
评论
9
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务