题目:
给定一个字符串,找出不含有重复字符的最长子串的长度。
示例:
给定 “abcabcbb” ,没有重复字符的最长子串是 “abc” ,那么长度就是3。
给定 “bbbbb” ,最长的子串就是 “b” ,长度是1。
给定 “pwwkew” ,最长子串是 “wke” ,长度是3。请注意答案必须是一个子串,”pwke” 是 子序列 而不是子串。
思路:
采用滑动窗口的思想,同时,为了减少判断现有子串儿内是否含有子串儿右侧的字符,采用使用一个bool[256]的数组来存放每个字符在子串儿内是否出现过,这样查找时间复杂度为O(1)。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int left = 0,right = -1; //s[left...right]没有重复字符的子串儿
bool freq[256] = {false};
int maxLen = 0;
while(left < s.length()){
if(right + 1 < s.size() && freq[s[right+1]] == false){
freq[s[++right]] = true;
}
else
freq[s[left++]] = false;
maxLen = max(maxLen,right - left +1);
}
return maxLen;
}
};