LeetCode 连续字符

2021-02-12  本文已影响0人  吴敬悦

给你一个字符串 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

提示:

我的算法实现为:

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. 开辟一个跟字符串相同长度的数组;
  2. 记录不同字母的下标和字符;
  3. 当下一个字符跟当前正在比较字符的相同时,那么就需要将当前的对应数组中的位置 +1
  4. 如果不相等,那么就更新所记录的值。

我去看了别人写的,我发现有一种方式是使用正则表达式的方式,但是由于我对 kotlin 不熟悉,所以就不知道怎么写,下次补上。


来源:力扣(LeetCode)

上一篇下一篇

猜你喜欢

热点阅读