Longest Substring Without Repeating Characters——经典题
2015-06-04 18:55
344 查看
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.
历遍字符串,当当前字符出现过的时候,子串开始位置+1,否则更新locs数组中的hash值为当前位置。
其实就是用两个指针,判断出字符串中所有重复出现的字符的长度,选出最大值即可,复杂度O(n) + O(n) = O(n),而不是Ο(n2)
这道题纠结了我好久啊!!!!!
(其实这道题和Trapping Rain Water和Container With Most Water这两道题有异曲同工之妙)
看了这篇博客:http://www.cnblogs.com/dollarzhaole/p/3155712.html
历遍字符串,当当前字符出现过的时候,子串开始位置+1,否则更新locs数组中的hash值为当前位置。
其实就是用两个指针,判断出字符串中所有重复出现的字符的长度,选出最大值即可,复杂度O(n) + O(n) = O(n),而不是Ο(n2)
这道题纠结了我好久啊!!!!!
(其实这道题和Trapping Rain Water和Container With Most Water这两道题有异曲同工之妙)
看了这篇博客:http://www.cnblogs.com/dollarzhaole/p/3155712.html
class Solution { public: int lengthOfLongestSubstring(string s) { int locs[256];//保存字符上一次出现的位置 memset(locs, -1, sizeof(locs)); int idx = -1, max = 0;//idx为当前子串的开始位置-1 for (int i = 0; i < s.size(); i++) { if (locs[s[i]] > idx)//如果当前字符出现过,那么当前子串的起始位置为这个字符上一次出现的位置+1 { idx = locs[s[i]]; } if (i - idx > max) { max = i - idx; } locs[s[i]] = i; } return max; } }
相关文章推荐
- 常用EXE文件反编译工具
- 指向数组的指针
- Jenkins(二)
- 使用ReactiveCocoa限制UITextField只能输入正确的金额
- Codeforces Round #306 (Div. 2)
- 装B必备词汇
- 专利代理考前须知
- lightoj1079(数学概率与期望)
- spring security自定义过滤器
- 没有人会在意大数据是如何定义的!
- 诸葛告诉你如何用数据来做渠道效果的分析
- poj3009 Curling 2.0(DFS回溯)
- [转]优秀程序员应该做的几件事
- APICloud侵权DCloud而被起诉 大众创业下乱象丛生
- 作业3
- 不怕老,就怕老油条
- Hadoop2.0 QJM方式的HA的配置
- 欢迎使用CSDN-markdown编辑器
- 字典树模板(java)
- webview 页面返回原生页面