当前位置: 面试刷题>> 最多有k个不同字符的最长子串 (经典算法题500道)
### 题目描述补充
**题目**: 最多有k个不同字符的最长子串
给定一个字符串 `s` 和一个整数 `k`,请找出 `s` 中包含最多 `k` 个不同字符的最长子串的长度。
**示例 1**:
```
输入: s = "eceba", k = 2
输出: 3
解释: "ece" 是长度为 3 的子串,包含 2 个不同的字符 'e' 和 'c'。
```
**示例 2**:
```
输入: s = "aa", k = 1
输出: 2
解释: "aa" 是长度为 2 的子串,包含 1 个不同的字符 'a'。
```
### PHP 示例代码
```php
function lengthOfLongestSubstringKDistinct($s, $k) {
$maxLen = 0;
$start = 0;
$charCount = array();
for ($end = 0; $end < strlen($s); $end++) {
$char = $s[$end];
if (!isset($charCount[$char])) {
$charCount[$char] = 0;
}
$charCount[$char]++;
while (count($charCount) > $k) {
$leftChar = $s[$start];
$charCount[$leftChar]--;
if ($charCount[$leftChar] == 0) {
unset($charCount[$leftChar]);
}
$start++;
}
$maxLen = max($maxLen, $end - $start + 1);
}
return $maxLen;
}
// 示例
echo lengthOfLongestSubstringKDistinct("eceba", 2); // 输出 3
```
### Python 示例代码
```python
def lengthOfLongestSubstringKDistinct(s, k):
max_len = 0
start = 0
char_count = {}
for end in range(len(s)):
char = s[end]
if char not in char_count:
char_count[char] = 0
char_count[char] += 1
while len(char_count) > k:
left_char = s[start]
char_count[left_char] -= 1
if char_count[left_char] == 0:
del char_count[left_char]
start += 1
max_len = max(max_len, end - start + 1)
return max_len
# 示例
print(lengthOfLongestSubstringKDistinct("eceba", 2)) # 输出 3
```
### JavaScript 示例代码
```javascript
function lengthOfLongestSubstringKDistinct(s, k) {
let maxLen = 0;
let start = 0;
let charCount = {};
for (let end = 0; end < s.length; end++) {
const char = s[end];
if (!charCount[char]) {
charCount[char] = 0;
}
charCount[char]++;
while (Object.keys(charCount).length > k) {
const leftChar = s[start];
charCount[leftChar]--;
if (charCount[leftChar] === 0) {
delete charCount[leftChar];
}
start++;
}
maxLen = Math.max(maxLen, end - start + 1);
}
return maxLen;
}
// 示例
console.log(lengthOfLongestSubstringKDistinct("eceba", 2)); // 输出 3
```
**码小课**网站中有更多关于算法和数据结构的相关内容分享给大家学习,涵盖了从基础到进阶的各种知识,欢迎访问学习。