求字符串的最長無重複字符子串長度

題目:數組

給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。 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; }
相關文章
相關標籤/搜索