用c++ 求出一个字符串中最长并且没有重复的子串
时间: 2024-05-01 14:22:42 浏览: 104
python 实现给定一个字符串,找出不含有重复字符的最长子串的长度
5星 · 资源好评率100%
以下是一个基于滑动窗口的 C++ 代码,可以找到一个字符串中最长且没有重复字符的子串:
```cpp
#include <iostream>
#include <unordered_set>
#include <string>
using namespace std;
int lengthOfLongestSubstring(string s) {
unordered_set<char> set;
int left = 0, right = 0, maxLen = 0;
while (right < s.size()) {
// 如果字符不在集合中,就加入集合并扩大窗口右边界
if (set.count(s[right]) == 0) {
set.insert(s[right]);
right++;
maxLen = max(maxLen, (int)set.size());
} else {
// 如果字符已经在集合中,就移除集合中的左边字符并缩小窗口左边界
set.erase(s[left]);
left++;
}
}
return maxLen;
}
int main() {
string s = "abcabcbb";
cout << lengthOfLongestSubstring(s) << endl;
return 0;
}
```
这里使用了一个 `unordered_set` 来保存当前窗口内的字符,如果某个字符已经在集合中出现过了,那么就需要将集合中的左边字符都移除,直到集合中不再包含重复字符。
时间复杂度为 O(n),其中 n 是字符串的长度。
阅读全文