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的时候。
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. };
相关文章推荐
- ThinkPHP文件上传类
- yum改成网易的源
- HDU 4747 Mex 区间更新
- 关于requirejs框架添加时间戳问题
- 如何指定进程运行的CPU
- 2703 骑车与走路
- MySQL修改root账号密码的方法
- SVN常用命令
- Rotate Image
- 234 Palindrome Linked List
- Android运行时异常“Binary XML file line # : Error inflating class”
- 对项目的了解几乎为零?如何快速上手一个新项目
- Visual Studio 2015官方汇总包括下载和视频
- 虚函数调用中的指针类型转换以及指针所指类型的本质
- dd测试硬盘性能
- XHTML事件属性
- 本地搭建SVN局域网服务器
- 通过一个color创建一个image
- Codeforces 558E A Simple Task (简单题)
- Hduoj2818【带权并查集】