原题:
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.
解析:要求寻找字符串中的无重复字符的最长子串长度。显然,最长子串的长度也不会超过256,所以可以记录字串中各字符出现次数,保证子串中每个字符出现次数为1即可,算法复杂度为O(n)。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s.length()<=1) return s.length();
int a[256] = {0};
int j=0, k=1, l=s.length(), max=1;
a[s[0]] = 1;
while(k<l && (l-j)>max))
{
if(a[s[k]]==0)
{
a[s[k++]] = 1;
if(k-j > max) max = k-j;
}
else a[s[j++]] = 0;
}
return max;
}
};