前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 1446:Consecutive Characters(连续字符)

LeetCode 1446:Consecutive Characters(连续字符)

作者头像
后台技术汇
发布2022-05-30 09:25:59
2660
发布2022-05-30 09:25:59
举报
文章被收录于专栏:后台技术汇

Together for a Shared future

一起向未来

今天带来的一道简单的算法题目《1446. 连续字符串》。

题目描述

给你一个字符串 s ,字符串的「能量」定义为:只包含一种字符的最长非空子字符串的长度。请你返回字符串的能量。

示例 1:

代码语言:javascript
复制
输入:s = "leetcode"
输出:2
解释:子字符串 "ee" 长度为 2 ,只包含字符 'e' 

示例 2:

代码语言:javascript
复制
输入:s = "abbcccddddeeeeedcba"
输出:5
解释:子字符串 "eeeee" 长度为 5 ,只包含字符 'e' 。

示例 3:

代码语言:javascript
复制
输入:s = "triplepillooooow"
输出:5

示例 4:

代码语言:javascript
复制
输入:s = "hooraaaaaaaaaaay"
输出:11

示例 5:

代码语言:javascript
复制
输入:s = "tourist"
输出:1

提示:

  • 1 <= s.length <= 500
  • s 只包含小写英文字母。

双指针算法

代码语言:javascript
复制
    /**
     * 双指针算法
     *
     * 执行用时:1 ms, 在所有 Java 提交中击败了100.00%的用户
     * 内存消耗:39.9  MB, 在所有 Java 提交中击败了5.05%的用户
     * @param s
     * @return
     */
    public static int maxPowerV1(String s) {
        if (s.length() == 0) {
            return 0;
        }

        int max = 1;
        for (int left = 0; left < s.length();) {
            // left 指向字符串首字符
            char ch = s.charAt(left);
            int right = left;
            // right 指向left所在字符
            for (; right < s.length(); right++) {
                if (ch == s.charAt(right)) {
                    continue;
                } else{
                    break;
                }
            }

            // 计算最大长度
            max = ((right - left) > max) ? (right - left) : max;
            // 重置left指针
            left = right;
        }
        return max;
    }

滑动窗口法

代码语言:javascript
复制
    /**
     * 滑动窗口法
     *
     * 执行用时:2 ms, 在所有 Java 提交中击败了13.19%的用户
     * 内存消耗:40 MB, 在所有 Java 提交中击败了5.05%的用户
     * @param s
     * @return
     */
    public static int maxPowerV2(String s) {
        if (s.length() == 0) {
            return 0;
        }

        int max = 1;
        int left = 0;
        int right = 1;
        // 直到右指针停止到末尾
        while ( right < s.length() ) {
            if (s.charAt(left) == s.charAt(right)) {
                right++;
            } else {
                left++;
            }
            max = Math.max(max, (right - left));
        }
        return max;
    }

复杂度分析

时间复杂度:O(n),其中 n 是字符串 s 的长度。遍历一次 s 的时间复杂度为 O(n)。

空间复杂度:O(1),我们只需要常数的空间保存若干变量。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 后台技术汇 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档