1. 程式人生 > >LeetCode 3. 無重複字元的最長子串(C++)

LeetCode 3. 無重複字元的最長子串(C++)

題目:

給定一個字串,找出不含有重複字元的最長子串的長度。

示例:

給定 “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; } };