原題:
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;
}
};