一、题目描述
给你一个字符串s,字符串s首尾相连组成一个环形,请你在环形中找出‘o’字符出现了偶数次最长子字符串的长度。
二、输入描述
输入一串小写字母组成的字符串。
三、输出描述
输出一个整数。
四、解题思路
题目要求在给定的环形字符串中找出字符’o’出现了偶数次的最长子字符串的长度。
解题思路如下:
- 读取输入的环形字符串;
- 将环形字符串转换为字符数组;
- 统计字符数组中字符’o’的个数,记为num;
- 判断num的奇偶性,如果num为偶数,表示字符’o’出现了偶数次,直接输出环形字符串的长度len作为最长子字符串的长度;如果num为奇数,表示字符’o’出现了奇数次,输出环形字符串的长度len减去1作为最长子字符串的长度;
- 输出最长子字符串的长度。
解题思路分析:
该算法首先统计字符’o’在环形字符串中出现的次数,然后根据次数的奇偶性确定最长子字符串的长度。如果字符’o’出现了偶数次,那么整个环形字符串都可以作为最长子字符串;如果字符’o’出现了奇数次,需要去掉一个字符’o’以满足出现次数的偶数性质,所以最长子字符串的长度为环形字符串长度减去1。算法的时间复杂度为O(n),其中n为环形字符串的长度。
五、JavaScript算法源码
// 读取输入的环形字符串
const s = readline();
// 将环形字符串转换为字符数组
const arr = s.split('');
// 统计字符'o'的个数
let num = 0;
for (const c of arr) {
if (c === 'o') {
num++;
}
}
// 判断字符'o'出现的次数的奇偶性,并输出最长子字符串的长度
const len = arr.length;
if (num % 2 === 0) {
console.log(len);
} else {
console.log(len - 1);
}
六、效果展示
1、输入
neozhastudyoo
2、输出
12
3、说明
包含偶数个的最长的字符串是neozhastudyo,长度为12。
🏆下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路
🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。