1446. 连续字符
题目描述
给你一个字符串 s ,字符串的「能量」定义为:只包含一种字符的最长非空子字符串的长度。
请你返回字符串的能量。
提示:
- 1 < = s . l e n g t h < = 500 1 <= s.length <= 500 1<=s.length<=500
- s 只包含小写英文字母。
其实,题目就是让求 最长连续相同子串长度
思路:
- 双指针:i 表示 连续相同子串的 起始位置,j 表示 连续相同子串的终止位置;
- 初始化:i = 0; j = 1;
- 若 s[i] != s[j],说明 i,j 已经不在同一个 “连续相同子串”了,则需要将 “起始位置 i” 更新为 j;
- 若s[i] == s[j],说明 i,j 仍然在同一个 “连续相同子串”,则需要将 “终止位置 j” 后移一位;
- 此时,每次都要更新 res
Noe:初始化 res = 1
,而不是 0.
class Solution {
public int maxPower(String s) {
int i = 0;
int j = 1;
int res = 1;
int n = s.length();
while (j < n) {
System.out.println("i = " + i);
System.out.println("j = " + j);
System.out.println("res = " + res);
if (s.charAt(i) != s.charAt(j)) {
i = j; // 这里不能是 i++
} else {
res = Math.max(j - i + 1, res);
}
j++;
}
return res;
}
}
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( 1 ) O(1) O(1)