给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。给出c++代码
时间: 2023-10-14 20:49:46 浏览: 202
以下是给定字符串 s,找出其中不含有重复字符的最长子串的长度的 C++ 代码示例:
```cpp
#include <iostream>
#include <unordered_set>
int lengthOfLongestSubstring(std::string s) {
int n = s.length();
int maxLength = 0;
int left = 0, right = 0;
std::unordered_set<char> charSet;
while (right < n) {
if (charSet.find(s[right]) == charSet.end()) {
charSet.insert(s[right]);
maxLength = std::max(maxLength, right - left + 1);
right++;
} else {
charSet.erase(s[left]);
left++;
}
}
return maxLength;
}
int main() {
std::string s = "abcabcbb";
int length = lengthOfLongestSubstring(s);
std::cout << "Length of longest substring without repeating characters: " << length << std::endl;
return 0;
}
```
该代码使用滑动窗口的思想,在遍历字符串时维护一个窗口,窗口内的字符不重复。通过两个指针 `left` 和 `right` 来表示窗口的左边界和右边界。使用 `unordered_set` 来存储窗口内的字符,以便进行查找和删除操作。
逐个字符遍历字符串,如果当前字符在窗口中不存在,则将该字符加入窗口,并更新最大长度。如果当前字符已经存在于窗口中,则将窗口左边界向右移动一位,并删除左边界对应的字符,直到当前字符不再重复为止。
最终,返回的 `maxLength` 即为最长不含重复字符的子串的长度。
在示例中,字符串 "abcabcbb" 的最长不含重复字符的子串是 "abc",因此输出结果为 3。
阅读全文