您的位置:首页 > 其它

【LeetCode】3. Longest Substring Without Repeating Characters

2017-01-14 16:55 447 查看
Difficulty: Medium

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.

分析
假设子串里含有重复字符,则父串一定含有重复字符,单个子问题就可以解决父问题,因此可以使用贪心法。
跟动规不同,动规里,单个子问题只能影响父问题,不足以解决父问题。
从左往右扫描,当遇到重复字母时,以上一个重复字母的index+1,作为新的搜索起点位置,直到最后一个字母,
时间复杂度为O(n)



class Solution {
public:
int lengthOfLongestSubstring(string s) {
const int ASCII_MAX = 255;
int last[ASCII_MAX];
int start = 0;
fill(last, last + ASCII_MAX, -1);
int max_len = 0;
for (int i = 0; i < s.size(); i++) {
if (last[s[i]] >= start) {
max_len = max(i - start, max_len);
start = last[s[i]] + 1;
}
last[s[i]] = i;
}
return max((int)s.size() - start, max_len);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode