当前位置: 面试刷题>> 最长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 示例代码
```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 示例代码
```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 示例代码
```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
```
以上代码均实现了题目要求的功能,并给出了示例测试。希望这些示例能帮助你理解并解决问题。