題目:數組
給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。 spa
示例 1: code
輸入: "abcabcbb" blog
輸出: 3 字符串
解釋: 由於無重複字符的最長子串是 "abc",因此其長度爲 3。 string
示例 2: it
輸入: "bbbbb" class
輸出: 1 di
解釋: 由於無重複字符的最長子串是 "b",因此其長度爲 1。 文件
示例 3:
輸入: "pwwkew"
輸出: 3
解釋: 由於無重複字符的最長子串是 "wke",因此其長度爲 3。
請注意,你的答案必須是 子串 的長度,"pwke" 是一個子序列,不是子串。
這道題經過滑動窗口來解決,經過一個vector/數組 定義256大小,下標表示全部字符,用一個left表示窗口的左邊界,i向右滑動,strmax表示最大窗口大小,也是不重複字符的最長字串。經過vector中的字符下標所對應的值和left比較判斷窗口中是否出現重複字符,若是出現,left從新更新。可是注意好比 abca(left)cdefa 好比當i走到第三個a時 left的值就會是第二個a的下標數,這樣窗口大小就是i-left,恰好不包括left所指的a字符。
//其餘頭文件自寫 #include <vector>
#include<algorithm> int MaxStr(string str) { vector<int> help(256,-1); int strmax = 0; int left = -1; int len = str.length(); for(int i=0;i<len;i++) { left = max(left, help[str[i]]); help[str.at(i)] = i; strmax = max(strmax, i - left); } return strmax; }