连续字符
难度:
标签:
题目描述
代码结果
运行时间: 24 ms, 内存: 16.4 MB
/*
* 思路:
* 使用 Java Stream 进行字符串处理。利用 IntStream 生成字符序列,
* 遍历字符串,计算当前字符能量值,并与最大能量值比较更新。
*/
import java.util.stream.IntStream;
public class Solution {
public int maxPower(String s) {
return IntStream.range(1, s.length())
.map(i -> s.charAt(i) == s.charAt(i - 1) ? 1 : -i)
.map(Math::abs)
.reduce((acc, i) -> acc + i)
.orElse(1);
}
}
解释
方法:
题解的核心思路是通过一次遍历字符串来找到最长的连续相同字符的子串。首先设定两个变量,max_length 用于记录遍历过程中遇到的最大长度,current_length 用于记录当前连续字符的长度。遍历从第二个字符开始,如果当前字符与前一个字符相同,则增加 current_length 的长度;如果不同,则将 current_length 重置为 1。每次连续字符长度增加时,使用 max 函数更新 max_length。最终,max_length 将包含所需的最大连续字符长度。
时间复杂度:
O(n)
空间复杂度:
O(1)
代码细节讲解
🦆
算法中提到的'遍历字符串从第二个字符开始',这种做法是否会在字符串长度为1时遗漏检查?
▷🦆
在算法中,如果字符串中所有字符都相同,current_length的更新逻辑是否仍然有效?
▷🦆
题解中提到使用max函数更新max_length,这种每次迭代更新的方式是否有可能导致算法效率降低?
▷🦆
算法结束后直接返回max_length,是否考虑了所有可能的边界情况,例如字符串完全由不同字符组成的情况?
▷