3. Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1.
题目分析:
给定一个字符串,找出最长的不包含重复字符的子串的长度。
假定该满足不包含重复字符条件的子串为s1, 则s1 只有两种情况:
1、 s1 存在于两个重复字符之间。
2、 s1 为 [s[i], s[s.size()-1]]区间上的无重复字符构成。
可通过固定子串头结点,并从头结点向后依次扫描的方法获取所有的s1,当扫描到重复字符’x’时, 判断上一次出现’x’的位置是否在头结点之后,若是则更新正头结点为上一次出现’x’的后一个结点,直至扫描至字符串结尾。并对所有s1 进行比较获取最长子串。
Solution
class Solution {
public:
int lengthOfLongestSubstring(string s) {
vector<int> vDct(128, -1);// ASCII共包含128个字符,vDct['x'] 表示 'x' 在s第一次出现的位置下标
int maxLen = 0;
int istart = -1;
for(int i = 0; i < s.size(); i++)
{
if(vDct[s[i]] > istart)
istart = vDct[s[i]];
vDct[s[i]] = i;
maxLen = max(maxLen, i - istart);
}
return maxLen;
}
};
T(n) = O(n);
S(n) = O(1);
PS: 刚开始做这题时,并没有想到这种思路,而是采用了 暴力破解法=_=|。
Time Limit Exceeded...
And then,thanks for Internet, Baidu, Google....