华为OD机试真题 JavaScript 实现【最长子字符串的长度】【2022Q4 100分】,附详细解题思路-LMLPHP

一、题目描述

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

二、输入描述

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

三、输出描述

输出一个整数。

四、解题思路

题目要求在给定的环形字符串中找出字符’o’出现了偶数次的最长子字符串的长度。

解题思路如下:

  1. 读取输入的环形字符串;
  2. 将环形字符串转换为字符数组;
  3. 统计字符数组中字符’o’的个数,记为num;
  4. 判断num的奇偶性,如果num为偶数,表示字符’o’出现了偶数次,直接输出环形字符串的长度len作为最长子字符串的长度;如果num为奇数,表示字符’o’出现了奇数次,输出环形字符串的长度len减去1作为最长子字符串的长度;
  5. 输出最长子字符串的长度。

解题思路分析:

该算法首先统计字符’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分】,附详细解题思路-LMLPHP


🏆下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路

🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)

每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

华为OD机试真题 JavaScript 实现【最长子字符串的长度】【2022Q4 100分】,附详细解题思路-LMLPHP

06-15 00:38