美文网首页
LeetCode 连续字符

LeetCode 连续字符

作者: 吴敬悦 | 来源:发表于2021-02-12 20:22 被阅读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
    

    提示:

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

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


    来源:力扣(LeetCode)

    相关文章

      网友评论

          本文标题:LeetCode 连续字符

          本文链接:https://www.haomeiwen.com/subject/mmljxltx.html