当前位置: 面试刷题>> 最长AB子串 (经典算法题500道)


题目描述补充

题目:最长AB子串

给定一个字符串s,其中只包含小写字母'a''b',请找出并返回该字符串中最长的交替出现'a''b'的子串的长度。交替出现的子串意味着子串中的字符按照'a''b''a''b'... 或 'b''a''b''a'... 的顺序排列,且不允许有连续的相同字符。

示例 1:

输入: s = "abab"
输出: 4
解释: 整个字符串都是交替出现的'a'和'b',因此最长交替子串的长度为4。

示例 2:

输入: s = "aaa"
输出: 0
解释: 字符串中没有交替出现的'a'和'b',因此最长交替子串的长度为0。

示例 3:

输入: s = "abbbaaaabbb"
输出: 4
解释: 最长的交替子串是"aabb",它的长度为4。

PHP 示例代码

function longestAlternatingSubstring($s) {
    $maxLen = 0;
    $currentLen = 1;
    $prevChar = $s[0];

    for ($i = 1; $i < strlen($s); $i++) {
        if ($s[$i] !== $prevChar) {
            $currentLen++;
        } else {
            $maxLen = max($maxLen, $currentLen);
            $currentLen = 1;
        }
        $prevChar = $s[$i];
    }

    // 不要忘记比较最后一个子串的长度
    $maxLen = max($maxLen, $currentLen);

    return $maxLen;
}

// 测试
echo longestAlternatingSubstring("abab"); // 输出 4
echo longestAlternatingSubstring("aaa"); // 输出 0
echo longestAlternatingSubstring("abbbaaaabbb"); // 输出 4

Python 示例代码

def longestAlternatingSubstring(s):
    max_len = 1
    current_len = 1
    prev_char = s[0]

    for i in range(1, len(s)):
        if s[i] != prev_char:
            current_len += 1
        else:
            max_len = max(max_len, current_len)
            current_len = 1
        prev_char = s[i]

    # 比较最后一个子串的长度
    max_len = max(max_len, current_len)

    return max_len

# 测试
print(longestAlternatingSubstring("abab"))  # 输出 4
print(longestAlternatingSubstring("aaa"))   # 输出 0
print(longestAlternatingSubstring("abbbaaaabbb"))  # 输出 4

JavaScript 示例代码

function longestAlternatingSubstring(s) {
    let maxLen = 1;
    let currentLen = 1;
    let prevChar = s[0];

    for (let i = 1; i < s.length; i++) {
        if (s[i] !== prevChar) {
            currentLen++;
        } else {
            maxLen = Math.max(maxLen, currentLen);
            currentLen = 1;
        }
        prevChar = s[i];
    }

    // 比较最后一个子串的长度
    maxLen = Math.max(maxLen, currentLen);

    return maxLen;
}

// 测试
console.log(longestAlternatingSubstring("abab")); // 输出 4
console.log(longestAlternatingSubstring("aaa")); // 输出 0
console.log(longestAlternatingSubstring("abbbaaaabbb")); // 输出 4

以上代码均实现了题目要求的功能,并给出了示例测试。希望这些示例能帮助你理解并解决问题。

推荐面试题