📜  门| GATE CS 2019 |第 54 题(1)

📅  最后修改于: 2023-12-03 15:12:37.022000             🧑  作者: Mango

题目描述

给定一个由小写字母组成的字符串 s,你需要将其分割成尽量多的子串,使得每个子串中的所有字符都相同。

返回每个子串的长度的最大值。

示例

输入: "ababcbacaqpgamilscxhdfiryxvkxewxewdkfetpszxnbqwyrqqegghh"

输出: 10

解释: 字符串的一个可能的分割方式是 "ababcbacaq"、"pg"、"a"、"mils"、"cxhdfiryxv"、"kxewxewdkfetpszxnbq"、"wyrqqegghh"。

每个子串的长度都为 1,且这些子串组成的数组和最大值为 10。

思路

遍历字符串s,维护当前子串的起始位置start和结束位置end。当s[i]与s[end]不相等时,说明需要分割一个子串,计算当前子串的长度,更新end和start。最终返回最大的子串长度。

Python代码
class Solution:
    def maxSameCharString(self, s: str) -> int:
        max_len = start = end = 0
        for i in range(len(s)):
            if s[i] == s[end]:
                end += 1
            else:
                max_len = max(max_len, end - start)
                start = end = i
        return max(max_len, end - start)
C++代码
class Solution {
public:
    int maxSameCharString(string s) {
        int max_len = 0;
        int start = 0, end = 0;
        for (int i = 0; i < s.size(); ++i) {
            if (s[i] == s[end]) {
                ++end;
            } else {
                max_len = max(max_len, end - start);
                start = end = i;
            }
        }
        return max(max_len, end - start);
    }
};
题目链接

门 | GATE CS 2019 |第 54 题