这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战
题目描述
给你一个字符串 s ,字符串的「能量」定义为:只包含一种字符的最长非空子字符串的长度。
请你返回字符串的能量。
示例 1:
输入:s = "leetcode"
输出:2
解释:子字符串 "ee" 长度为 2 ,只包含字符 'e' 。
示例 2:
输入:s = "abbcccddddeeeeedcba"
输出:5
解释:子字符串 "eeeee" 长度为 5 ,只包含字符 'e' 。
示例 3:
输入:s = "triplepillooooow"
输出:5
示例 4:
输入:s = "hooraaaaaaaaaaay"
输出:11
示例 5:
输入:s = "tourist"
输出:1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/consecutive-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路分析
- 今天的算法题目是字符串处理题目,题目要求求出只包含一种字符的最长非空子字符串的长度。。根据题意,我们采取双指针的解题思想,记录当前位置i, 和位置i的字符,然后设置指针j, s.charAt(j) 与 s.charAt(i) 比较,找到第一个不相同的地方,使用 j - i 记录当前的子串长度,然后动态更新最大子串长度。实现代码如下:
- 双指针在线性数据结构中,比如:数组,链表等线性结构中应用比较广泛。通过两个指针的移动,提升执行效率。在链表中,判断链表有没有环也常常使用双指针。
通过代码
class Solution {
public int maxPower(String s) {
int ans = 0;
int n = s.length();
if (n == 0) {
return ans;
}
ans = 1;
int j = 0;
for (int i = 0; i < n; ) {
char temp = s.charAt(i);
j = i + 1;
while (j < n && temp == s.charAt(j)) {
j++;
}
ans = Math.max(ans, j - i);
i = j;
}
return ans;
}
}
总结
- 上述算法的时间复杂度是O(n),空间复杂度是O(1)
- 坚持算法每日一题,加油!