Description:
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.
题目大意:给定一个字符串,从中寻找出不包含重复字符的连续的最长字符串的长度。
题目思路:在这里可以设置两个指针,分别指向头部和最长的字符串的尾部,尾部指针先从头部开始移动,遇到相同的字符时就停止移动,记录此时字符串的长度;随后头部的指针也开始移动,找到重复的字符,以保证下次移动时从重复的字符下一个开始。经过一轮的循环后就可以得到最长的字符串的长度了。
class Solution {
private:
bool a[256];
public:
int lengthOfLongestSubstring(string s) {
memset(a,true,sizeof(a));
int count=0;
int ans=0;
int start=0;
for(int i=0;i<s.size();i++){
if(a[s[i]]){
a[s[i]]=false;
count++;
}
else{
ans=max(ans,count);
while(true){
a[s[start]]=true;
count--;
if(s[start]==s[i]) break;
start++;
}
start++;
a[s[i]]=false;
count++;
}
}
ans=max(ans,count);
return ans;
}
};
另外我也在考虑可不可以像LeetCode上面的第一题那样建立一个hash表来解决这个问题呢?我考虑了一下发现貌似和指针的这种方法本质上还是没有啥区别的。也不知道自己考虑的到底是对的还是错的,有待细细研究一下。