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

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

Thu Sep 19 2024
3 分钟
455 字

写这个题目主要是因为睡不着。现在是早上四点半。顺便一提我做的就是每日一题。还没到自己挑题目的地步。

题目#

字母序连续字符串 是由字母表中连续字母组成的字符串。换句话说,字符串 "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 由小写英文字母组成

分析与解答#

看着挺简单的。

CPP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public:
    int longestContinuousSubstring(string s) {
        int n = s.size();
        int ans = 1;
        int cnt = 1;
        for (int i = 1; i < n; i++) {
            if (s[i] - s[i - 1] == 1) {
                cnt++;
            } else {
                cnt = 1;
            }
            ans = max(ans, cnt);
        }
        return ans;
    }
};

然后就过了。太弱智了。亏我还爬起来写。看看能不能刷一刷速度。加了一个特判并且去掉了max

CPP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
    int longestContinuousSubstring(string s) {
        int n = s.size();
        if (n == 1) return 1;

        int ans = 1, cnt = 1;
        for (int i = 1; i < n; i++) {
            if (s[i] == s[i - 1] + 1) {
                cnt++;
                if (cnt > ans) {
                    ans = cnt;
                }
            } else {
                cnt = 1;
            }
        }
        return ans;
    }
};

可恶,结果比原来还慢。。

非常沮丧的去重新睡觉了。