文字列を考えると、あなたは、繰り返し文字の最長の文字列のサブ長さを含んでいないかを調べます。
例1:
入力:「abcabcbb」
出力:3
説明:その長さは3であるので、重複のない文字の最長のサブは、「ABC」であるため。
例2:
入力:「BBBBB」
出力:1つの
説明:最長の部分文字列は、その長さが1であるように、「B」のない文字が繰り返されているので。
例3:
入力:「pwwkew」
出力:3
説明:その長さが3であるので、「WKE」せずに文字を繰り返し最長のサブ文字列がされているので。
、「pwkeは」サブシーケンスではなく、部分文字列であるあなたの答えは、長さの部分文字列でなければならないことに注意してください。
出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
すべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。
マインド:JとS [j]は、[I、J)の範囲内の文字を繰り返している場合は、私たちは私を増やす必要はありません。私たちは「すべての要素の範囲内で、iはjのとなり[I、J]」をスキップすることができます+ 1。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int size,i=0,j,k,max=0;//i=begin j=end
size = s.size();
for(j = 0;j<size;j++){
for(k = i;k<j;k++)
if(s[k]==s[j]){//这里用hashmap可以更快找到与s[j]重复的位置i;
i = k+1;
break;
}
if(j-i+1 > max)
max = j-i+1;
}
return max;
}
};