题目
字母序连续字符串 是由字母表中连续字母组成的字符串。换句话说,字符串 "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);
}
}
评论区