给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。的c++代码
时间: 2023-09-05 09:10:39 浏览: 41
以下是使用滑动窗口算法实现的 C++ 代码:
```c++
#include <unordered_set>
int lengthOfLongestSubstring(string s) {
int n = s.size();
unordered_set<char> set;
int ans = 0, i = 0, j = 0;
while (i < n && j < n) {
if (set.find(s[j]) == set.end()) {
set.insert(s[j++]);
ans = max(ans, j - i);
} else {
set.erase(s[i++]);
}
}
return ans;
}
```
该算法使用双指针维护一个滑动窗口,滑动窗口中存储的是当前不含重复字符的子串。使用 `unordered_set` 来判断是否出现重复字符,如果出现重复字符,则将左指针向右移动一位,并从集合中删除对应的字符。如果没有出现重复字符,则将右指针向右移动一位,并将新的字符加入集合中。最后返回最长子串的长度。
相关问题
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
题目描述:
给定一个字符串 s,请你找出其中不含有重复字符的最长子串的长度。
示例:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
请你找出其中不含有重复字符的最长子串的长度给定一个字符串 s,
给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。根据提供的示例,我们可以使用滑动窗口的方法来解决这个问题。滑动窗口是一个可变大小的窗口,它可以在字符串上滑动,以找到不含有重复字符的最长子串。
具体步骤如下:
1. 定义一个字典来记录字符在当前窗口中出现的次数。
2. 定义两个指针left和right,分别表示当前窗口的左边界和右边界。
3. 初始化最长子串的长度max_length为0。
4. 当right指针小于字符串长度时,执行以下步骤:
- 将right指针指向的字符加入到字典中,并增加其出现次数。
- 如果字典中right指针指向的字符的出现次数大于1,说明窗口中出现了重复字符,需要缩小窗口。
- 缩小窗口的方式是将left指针指向的字符从字典中减少其出现次数,并将left指针右移一位。
- 更新最长子串的长度max_length为当前窗口的长度和max_length中的较大值。
- 将right指针右移一位。
5. 返回最长子串的长度max_length。