一、题目描述
给你一个字符串s,字符串s首尾相连组成一个环形,请你在环形中找出‘o’字符出现了偶数次最长子字符串的长度。
二、输入描述
输入一串小写字母组成的字符串。
三、输出描述
输出一个整数。
四、解题思路
题目要求在给定的环形字符串中找出字符’o’出现了偶数次的最长子字符串的长度。
解题思路如下:
- 读取输入的环形字符串;
- 将环形字符串转换为字符数组;
- 统计字符数组中字符’o’的个数,记为num;
- 判断num的奇偶性,如果num为偶数,表示字符’o’出现了偶数次,直接输出环形字符串的长度len作为最长子字符串的长度;如果num为奇数,表示字符’o’出现了奇数次,输出环形字符串的长度len减去1作为最长子字符串的长度;
- 输出最长子字符串的长度。
解题思路分析:
该算法首先统计字符’o’在环形字符串中出现的次数,然后根据次数的奇偶性确定最长子字符串的长度。如果字符’o’出现了偶数次,那么整个环形字符串都可以作为最长子字符串;如果字符’o’出现了奇数次,需要去掉一个字符’o’以满足出现次数的偶数性质,所以最长子字符串的长度为环形字符串长度减去1。算法的时间复杂度为O(n),其中n为环形字符串的长度。
五、Java算法源码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 首尾相连组成一个环形的字符串
String line = sc.nextLine();
char[] chrs = line.toCharArray();
int len = chrs.length;
// 环形中‘o’字符的个数
int num = 0;
for (char chr : chrs) {
if (chr == 'o') {
num += 1;
}
}
// 出现了偶数次
if (num % 2 == 0) {
System.out.println(len);
} else {
// 出现了奇数次
System.out.println(len - 1);
}
}
六、效果展示
1、输入
neozhastudyoo
2、输出
12
3、说明
包含偶数个的最长的字符串是neozhastudyo,长度为12。
🏆下一题:华为OD机试真题 Java 实现【最多提取子串数目】【2023Q1 100分】
🏆本文收录于,华为OD机试(JAVA)(2022&2023)
本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。