最长子字符串的长度(一)

567 篇文章

已下架不支持订阅

473 篇文章

已下架不支持订阅

题目解析

本题很简单,只要统计出输入字符串s中'o'的个数:

  • 如果 'o' 为偶数个,则s本身就是一个含有偶数个'o'的子字符串,结果输出s.length
  • 如果 'o' 为奇数个,由于s是环形的,因此只要任选环中任意一个'o'解开(删除),剩下的就是含有偶数个 'o' 的子串,该子串长度为 s.length - 1

 

JavaScript算法源码

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
  const s = await readline();

  // s中'o'的个数
  let zeroCount = 0;

  for (let c of s) {
    if (c == "o") zeroCount++;
  }

  if (zeroCount % 2 == 0) {
    console.log(s.length);
  } else {
    console.log(s.length - 1);
  }
})();

 

Java算法源码

已下架不支持订阅

### 解决最长子字符串问题的算法方法 最长子字符串问题通常涉及在给定字符串中找到满足特定条件的子字符串。对于特定的条件,例如在环形字符串中找到字符 'o' 出现数次的最长子字符串,可以采用不同的算法策略。 #### 简单计数方法 对于些简单的场景,可以通过统计字符出现的次数来解决问题。例如,在环形字符串中找到字符 'o' 出现数次的最长子字符串: 1. 遍历字符串,统计字符 'o' 的出现次数。 2. 如果 'o' 的总数是数,那么整个字符串就是满足条件的最长子字符串。 3. 如果 'o' 的总数是奇数,则最长子字符串将是整个字符串长度减去。 这种方法的时间复杂度是 O(n),其中 n 是字符串长度。这在处理大数据量时效率较高。 ```java public static int getResult(String s) { int n = s.length(); int zeroCount = 0; for (int i = 0; i < n; i++) { if (s.charAt(i) == 'o') zeroCount++; } if (zeroCount % 2 == 0) { return n; } else { return n - 1; } } ``` #### 滑动窗口方法 滑动窗口算法适用于需要找到满足特定条件的连续子字符串的问题。这种方法通过维护一个窗口,窗口内满足条件时扩展窗口,不满足条件时移动窗口起始位置。 1. 初始化两个指针 `start` 和 `end` 来表示窗口的起始和结束位置。 2. 移动 `end` 指针来扩大窗口。 3. 当窗口内元素不满足条件时,移动 `start` 指针以缩小窗口。 滑动窗口算法的时间复杂度通常是 O(n),适用于处理大尺寸的数据集。 ```python def max_even_substring_length(s): count = 0 max_length = 0 for char in s: if char == 'o': count += 1 else: count = 0 max_length = max(max_length, count) return max_length if max_length % 2 == 0 else max_length - 1 ``` #### 总结 选择合适的算法取决于具体的问题要求和数据特性。对于简单的计数问题,直接统计可能就足够了;而对于更复杂的条件,滑动窗口等更高级的算法可能更为适用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员阿甘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值