标签:leetcode longest substring wi
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. };
版权声明:本文为博主原创文章,未经博主允许不得转载。
LeetCode 3 Longest Substring Without Repeating Characters
标签:leetcode longest substring wi
原文地址:http://blog.csdn.net/csdnjack_/article/details/46982525