Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb"
, the answer is "abc"
, which the length is 3.
Given "bbbbb"
, the answer is "b"
, with the length of 1.
Given "pwwkew"
, the answer is "wke"
, with the length of 3. Note that the answer must be a substring, "pwke"
is a subsequence and not a substring.
问题描述:给定字符串,返回不包含重复字母的最长子串。
解题思路:首先我们可以利用table来记录子串中每个字符对应的index。那么我们如何找合适的串呢。
我们要先找出不含重复字母的串,比如对于abcabcbb来说,a->ab->abc->abca,到abca的时候我们发现有重复的a,于是我们的起点就跳到第二个a那里,再重复上面的步骤。具体的代码如下:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int start = 0;//设置起点
int maxlength = 0;
int table[256];
for(int i=0; i<256; i++) table[i]=-1;// 全部初始化为-1
for(int i=0; i<s.length(); i++){
if(table[s[i]]!=-1){//当出现重复的字符时,将起点移到重复的字符上(后一个)
while(start<=table[s[i]]){
table[s[start]] = -1;
start++;
}
}
int tmplength = i-start+1;
if(tmplength>maxlength) maxlength=tmplength;
table[s[i]] = i;
}
return maxlength;
}
};