滞在ボタン:最長部分文字列の無い繰り返し3つの文字
説明タイトル:
文字列を考えると、あなたが繰り返し文字の最長の文字列のサブ長さを含んでいないかを調べます。
例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
すべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。
****ソリューション:トラバーサルの利便性と引き換えに収納スペースで、ハッシュと同様の方法を使用します。
int lengthOfLongestSubstring(char *s){
int max=0;// 用来记录当前已探测到的最长子串的长度
int head=0;
int rear=0;
int table[128]={0};
for(head=0;head<strlen(s);head++){
int i = (int)s[head];
if(table[i]!=0){// 发生重复,更新rear位置
rear = (table[i]>=rear)?table[i]:rear;
}
max = (max>=(head-rear+1))?max:head-rear+1; // 更新最大不重复子串的位数
}
return ret;
}