無重復(fù)字符的最長(zhǎng)子串
給定一個(gè)字符串,請(qǐng)你找出其中不含有重復(fù)字符的 最長(zhǎng)子串 的長(zhǎng)度莽鸿。
示例 1:
輸入: "abcabcbb"
輸出: 3
解釋: 因?yàn)闊o重復(fù)字符的最長(zhǎng)子串是 "abc"昧旨,所以其長(zhǎng)度為 3。
示例 2:
輸入: "bbbbb"
輸出: 1
解釋: 因?yàn)闊o重復(fù)字符的最長(zhǎng)子串是 "b"祥得,所以其長(zhǎng)度為 1兔沃。
示例 3:
輸入: "pwwkew"
輸出: 3
解釋: 因?yàn)闊o重復(fù)字符的最長(zhǎng)子串是 "wke",所以其長(zhǎng)度為 3级及。
請(qǐng)注意乒疏,你的答案必須是 子串 的長(zhǎng)度,"pwke" 是一個(gè)子序列饮焦,不是子串怕吴。
模板:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
}
};
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán)县踢,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處转绷。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
//ASCII表共能表示256個(gè)字符
int vec[256];//明明只是個(gè)數(shù)組不知道為啥起名叫vec
//[-1,-1硼啤,-1议经,-1,-1,-1爸业,……其骄,-1,-1扯旷,-1]
for(int i=0;i<256;i++)
vec[i]=-1;
int in=-1,maxx=0;
for(int i=0;i<s.length();i++)//遍歷字符串
{
//step2(再看這里)
//當(dāng)(vec[s[i]] > -1)的時(shí)候拯爽,說明vec已經(jīng)經(jīng)歷了下面的賦值
//之后的vec[s[i]]只要被賦值,就一定比in大
//所以in值就是每次重復(fù)的時(shí)刻钧忽,也就是每次不重復(fù)字符串的起點(diǎn)
//in只要被賦值就說明該字母已經(jīng)重復(fù)過(最少這就是第一次)
if(vec[s[i]] > in)
{
in= vec[s[i]];
}
vec[s[i]]=i;
/*step1(先看這里)
"pwwpew"所要經(jīng)歷的:
vec[p] = 0;vec[w] = 1;vec[w] = 2;vec[p] = 3;vec[e] = 4;vec[w] = 6;
遍歷結(jié)束后:
vec[p] = 3;vec[e] = 4;vec[w] = 6;
*/
//step3(最后看這里)
//i-in 就是每次循環(huán)與不重復(fù)字符串起點(diǎn)的差值
//找到最大的差值并賦值即可
if(maxx<i-in)
maxx=i-in;
}
return maxx;
}
};