给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。\n\n输入: s = \"abcabcbb\"\n\n输出: 3 \n\n解释: 因为无重复字符的最长子串是 \"abc\",所以其长度为 3。
时间: 2023-04-27 08:04:44 浏览: 70
题目描述:
给定一个字符串 s,请你找出其中不含有重复字符的最长子串的长度。
示例:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
解题思路:
使用滑动窗口的思想,维护一个窗口,窗口内的元素不重复,每次移动右边界,如果右边界的元素已经在窗口内,则移动左边界,直到窗口内的元素不重复。
代码实现:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int n = s.size();
unordered_set<char> hash;
int ans = 0, i = 0, j = 0;
while (i < n && j < n) {
if (!hash.count(s[j])) {
hash.insert(s[j++]);
ans = max(ans, j - i);
} else {
hash.erase(s[i++]);
}
}
return ans;
}
};
相关问题
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
题目描述:
给定一个字符串 s,请你找出其中不含有重复字符的最长子串的长度。
示例:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。的c++代码
以下是使用滑动窗口算法实现的 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` 来判断是否出现重复字符,如果出现重复字符,则将左指针向右移动一位,并从集合中删除对应的字符。如果没有出现重复字符,则将右指针向右移动一位,并将新的字符加入集合中。最后返回最长子串的长度。
阅读全文