给定一个字符串,请你找出其中不含有重复字符的
最长子串
的长度。
https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/
示例 1:
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:
输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:
输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,”pwke” 是一个子序列,不是子串。示例 4:
输入: s = “”
输出: 0
方法一:滑动窗口
mycode:
string findStr(const string& str) {
const int len = str.length();
if (len < 2)
return str;
int stIdx = 0;
int endIdx = 1;
int maxSubLenStIdx = 0;
int maxSubLen = 1;
unordered_set<char> mapCache;
mapCache.insert(str[stIdx]);
while (endIdx < len) {
if (mapCache.find(str[endIdx]) == mapCache.end()) {
mapCache.insert(str[endIdx]);
endIdx++;
}
else {
int currentSubLen = endIdx - stIdx;
if (currentSubLen > maxSubLen) {
maxSubLen = currentSubLen;
maxSubLenStIdx = stIdx;
}
mapCache.erase(str[stIdx]);
stIdx++;
}
if (endIdx == len) {//has been found!
int currentSubLen = endIdx - stIdx;
if (currentSubLen > maxSubLen) {
maxSubLen = currentSubLen;
maxSubLenStIdx = stIdx;
}
}
}
string maxSuStr = str.substr(stIdx, maxSubLen);
return maxSuStr;
}
版权声明:本文为qq_35865125原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。