给你一个字符串 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
提示:
- 1 <= s.length <= 500
- s 只包含小写英文字母。
我的算法实现为:
class Solution {
fun maxPower(s: String): Int {
// 保存不同字母的下标
var i = 0
// 保存当前进行比较的字母
var c = s[0]
val arr = IntArray(s.length) {1}
for (index in 1 until s.length) {
if (s[index] == c) {
arr[i] += 1
} else {
if (i != 0 && arr[i] > arr[0]) {
arr[0] = arr[i]
}
i ++
c = s[index]
}
}
if (i != 0 && arr[i] > arr[0]) {
arr[0] = arr[i]
}
return arr[0]
}
}
思路很简单就是:
- 开辟一个跟字符串相同长度的数组;
- 记录不同字母的下标和字符;
- 当下一个字符跟当前正在比较字符的相同时,那么就需要将当前的对应数组中的位置
+1
; - 如果不相等,那么就更新所记录的值。
我去看了别人写的,我发现有一种方式是使用正则表达式的方式,但是由于我对 kotlin
不熟悉,所以就不知道怎么写,下次补上。
来源:力扣(LeetCode)
网友评论