无重复字符的最长子串c++
时间: 2024-10-25 19:12:14 浏览: 29
在 C++ 中,寻找一个字符串中无重复字符的最长子串(也称为滑动窗口最长不重复子串)通常使用滑动窗口(Sliding Window)算法。这个算法通过维护两个指针,一个指向开始位置,另一个指向当前未重复字符的结尾,不断移动右边界,同时记录下已遇到的字符及其索引。
以下是一个简单的 C++ 实现:
```cpp
#include <unordered_set>
#include <string>
std::string lengthOfLongestSubstring(std::string s) {
if (s.empty()) return "";
std::unordered_set<char> seen;
int left = 0, right = 0;
int maxLength = 0;
while (right < s.size()) {
// 如果字符已经在集合中,将左边界移到该字符之后
if (seen.find(s[right]) != seen.end()) {
seen.erase(s[left]);
left++;
} else {
// 否则,添加字符到集合并更新最长长度
seen.insert(s[right]);
maxLength = std::max(maxLength, right - left + 1);
right++;
}
}
return maxLength == 0 ? "" : s.substr(0, maxLength);
}
```
在这个函数中,`seen` 集合用于跟踪已经遇到过的字符,`left` 和 `right` 分别表示滑动窗口的左右边界。如果遇到重复字符,会更新 `left` 指针,并继续检查下一个字符。当遍历完整个字符串后,返回找到的最长无重复字符子串。
阅读全文