侧边栏壁纸
博主头像
GabrielxD

列車は必ず次の駅へ。では舞台は?私たちは?

  • 累计撰写 471 篇文章
  • 累计创建 108 个标签
  • 累计收到 9 条评论

目 录CONTENT

文章目录

【遍历, 模拟】最长的字母序连续子字符串的长度【力扣第 311 场周赛】

GabrielxD
2022-09-18 / 0 评论 / 0 点赞 / 17 阅读 / 447 字 / 正在检测是否收录...

题目

6181. 最长的字母序连续子字符串的长度


字母序连续字符串 是由字母表中连续字母组成的字符串。换句话说,字符串 "abcdefghijklmnopqrstuvwxyz" 的任意子字符串都是 字母序连续字符串

  • 例如,"abc" 是一个字母序连续字符串,而 "acb""za" 不是。

给你一个仅由小写英文字母组成的字符串 s ,返回其 最长 的 字母序连续子字符串 的长度。

示例 1:

输入:s = "abacaba"
输出:2
解释:共有 4 个不同的字母序连续子字符串 "a"、"b"、"c" 和 "ab" 。
"ab" 是最长的字母序连续子字符串。

示例 2:

输入:s = "abcde"
输出:5
解释:"abcde" 是最长的字母序连续子字符串。

提示:

  • 1 <= s.length <= 10^5
  • s 由小写英文字母组成

解题

方法一:遍历 模拟

思路

直接遍历字符串,如果前一个字符是当前字符的前一个字母,延长当前连续子字符串(len)的长度,否则连续字符串就断了,更新一下最长长度(maxLen)然后初始化 len 为 1,维护一个新的连续子字符串长度。

遍历完成后最后可能会有一段连续子字符串的长度没算,再与 maxLne 比一次返回。

代码

class Solution {
    public int longestContinuousSubstring(String s) {
        char prev = s.charAt(0);
        int maxLen = 1, len = 1;
        for (int i = 1; i < s.length(); ++i) {
            char curr = s.charAt(i);
            if (curr - prev == 1) ++len;
            else {
                maxLen = Math.max(maxLen, len);
                len = 1;
            }
            prev = curr;
        }
        return Math.max(maxLen, len);
    }
}
0

评论区