//解答1
class Solution
{
public:
int lengthOfLongestSubstring(string s)
{
int ans = 0;
for(int i = 0; s[i] != '\0'; ++ i)
{
unordered_set<char> str;
int len = 0;
for(int j = i; s[j] != '\0'; ++ j)
{
if(str.count(s[j])) break;
str.insert(s[j]);
++ len;
}
len > ans? ans = len : ans = ans;
}
return ans;
}
};
//解法2:利用数组实现哈希查找
class Solution
{
public:
int lengthOfLongestSubstring(string s)
{
int m[256]={0};//字符有256个
int left=0;//查找的左边界
int mlen=0;//结果
for(int i=0;i<s.length();i++)
{
if(m[s[i]]==0||m[s[i]]<left)
{
mlen=max(mlen,i-left+1);
}
else
{
left=m[s[i]];
}
m[s[i]]=i+1;
}
return mlen;
}
};
//注解:
//查找范围:left->i 的大小
//m[s[i]]=0代表该字符s[I]未出现过
//若m[s[i]]!=0则m[s[i]]当前的大小代表字符s[i]再次出现时应该查找的起始位置,对应left的值
//若m[s[i]]<left说明字符s[i]上一次出现的位置不在当前的查找范围这就是为什么if语句要那样写