问题描述:
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.
解题思路: 以每个字母为子串首字母对位于该字符之后的字符串进行遍历,用一个变量max来记录当前的最长子串长度,运用哈希表来进行标记比如子串S的第i位,对应哈希表中的第S[i]位,如果当前遍历到的字符没有被标记过,则子串长度加1,与max进行比较,max取当前值与该子串长度的最大值。 这种方法在查找子串中是否已经存在当前遍历到的字符时比较快,但是整体的时间复杂度为O(n^2),仍需要进一步改进。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s=="")
return 0;
int max=1;
for(int i = 0;i<s.size();i++)
{
int book[256]={0};
book[s[i]]=1;
int cnt=1;
for(int j=i+1;j<s.size();j++)
{
if(book[s[j]]==1)
break;
else cnt++;
book[s[j]]=1;
if(cnt>max)
max=cnt;
}
}
return max;
}
};