码迷,mamicode.com
首页 > 其他好文 > 详细

3. Longest Substring Without Repeating Characters

时间:2016-11-26 14:46:02      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:pre   char   osi   padding   算子   tom   turn   blog   cte   

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.

分析

    假设子串里含有重复字符,则父串一定含有重复字符,单个子问题就可以决定父问题,因此可以用贪心法Greedy Algorithm。跟动规不同,动规里,单个子问题只能影响父问题,不足以决定父问题。从左往右扫描,当遇到重复字母时,以上一个重复字母的 index+1,作为新的搜索起始位置,直到最后一个字母,复杂度是 O(n)。
技术分享
该题的关键在于利用一个数组记录每个字母上一次的出现位置 postion
time complexity O(n)
space complexity O(1)
  1. class Solution {
  2. public:
  3. int lengthOfLongestSubstring(string s) {
  4. int start = 0, maxlen = 0, position[128] = {-1};
  5. fill(position, position + 128, -1);
  6. for( int i = 0; i < s.size(); ++i){
  7. if( position[s[i]] >= start){//说明在start后面出现了两个重复字母,需要计算子串
  8. maxlen = max( maxlen, i - start);
  9. start = position[s[i]] + 1;
  10. }
  11. position[s[i]] = i;
  12. }
  13. return max(maxlen, (int)s.size() - start);//不要忘记最后字符串结尾的计算
  14. }
  15. };









3. Longest Substring Without Repeating Characters

标签:pre   char   osi   padding   算子   tom   turn   blog   cte   

原文地址:http://www.cnblogs.com/zhxshseu/p/798c395acd59e9e6d7482e6566a6c7fa.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!