华为od机试e卷c++
时间: 2025-01-14 08:05:30 浏览: 57
### 华为OD机试C++试题及解答
#### 题目描述
给定一个字符串 `s` 和一个整数 `k`,编写函数来查找该字符串中的最长子串长度,在此子串中最多可以有 `k` 个不同字符。
#### 解题思路
这个问题可以通过滑动窗口的方法解决。具体来说:
- 使用两个指针表示当前窗口的起始位置和结束位置。
- 维护一个哈希表记录当前窗口内每种字符的数量。
- 当窗口内的不同字符数量超过 `k` 时,移动左边界直到满足条件。
- 记录并更新最大符合条件的子串长度。
```cpp
#include <unordered_map>
#include <string>
using namespace std;
int lengthOfLongestSubstringKDistinct(const string& s, int k) {
unordered_map<char, int> charCount;
int left = 0, maxLength = 0;
for (int right = 0; right < s.length(); ++right) {
char currentChar = s[right];
charCount[currentChar]++;
while (charCount.size() > k) {
char leftChar = s[left++];
charCount[leftChar]--;
if (charCount[leftChar] == 0) {
charCount.erase(leftChar);
}
}
maxLength = max(maxLength, right - left + 1);
}
return maxLength;
}
```
这段代码实现了上述逻辑,并能有效地找到含有至多 `k` 种不同字符的最大子串长度[^1]。
阅读全文
相关推荐


















