您的位置:首页 > 其它

LeetCode 3 Longest Substring Without Repeating Characters

2015-07-21 10:47 363 查看
Given a string,find the length of the longest substring without repeating characters. Forexample, 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.
解题思路:适合用哈希来做,因为对于单个字符(值为0-255)并且没有重复的。所以定义一个256的vector,并且初始化为-1。用这个哈希表来记录第i个字符上一次出现在字符串的哪个位置上,一次都没有出现时就是-1,即初始化的数。定义一个start,用来记录无重复出现字符的起点位置,这个题的关键就在于如何更新这个start。
如果没有重复元素,则start一直不用更新,则hash[s[i]]一定大于start,但是当出现重复元素的时候,此时hash[s[i]]并不一定大于start,eg:abba,此时start也不用更新,因此要想更新start,只有在hash[s[i]]
>=start的时候。

1.	class Solution {
2.	public:
3.	    int lengthOfLongestSubstring(string s) {
4.	        vector<int> hash(256,-1);
5.	        int ret = 0;
6.	        int start = 0;
7.	        for(int i = 0;i != s.size();++i)
8.	        {
9.	            if(hash[s[i]] >= start)
10.	                start = hash[s[i]] + 1;
11.	            ret = std::max(ret,i - start + 1);
12.	            hash[s[i]] = i;
13.	        }
14.	        return ret;
15.	    }
16.	};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: