码迷,mamicode.com
首页 > 编程语言 > 详细

【算法】查找字符串中无重复最长子串的长度

时间:2015-02-04 16:38:11      阅读:296      评论:0      收藏:0      [点我收藏+]

标签:

题目输入是一个字符串,找出没有重复字符的最长子字符串的长度

示例

abcabcbb最长子串(abc)长度为3  

bbbbbbb最长子串(b)长度为1

“abdevbac”最长子串(bdev)长度4

算法思想

    设置两个下标标识,初始时都位于数组的头部,并设置一个HashSet。标识runner先往后走,并将经过的字符放入HashSet中,当存在重复的字符时停止移动;此时,标识walker在后面追,直到walker的字符和runner的字符相同为止,此时walker与runner之间的字符是无重复的字符串,将长度记录为max。进行一遍遍历后可以得到最长字符串的长度值。

技术分享

时间复杂度

两个标识需要分别遍历一遍,即2*N,故复杂度为:O(n)

代码实现

public int lengthOfLongestSubstring(String s) {
     if(s==null || s.length()==0)
         return 0;
     HashSet<Character> set = new HashSet<Character>();
     int max = 0;
     int walker = 0;
     int runner = 0;
     while(runner<s.length())
     {
         if(set.contains(s.charAt(runner)))
         {
             while(s.charAt(walker)!=s.charAt(runner))
             {
                 set.remove(s.charAt(walker));
                 walker++;
             }
             if(max<runner-walker)
             {
                 max = runner-walker;
             }
             walker++;
         }
         else
         {
             set.add(s.charAt(runner));
         }
         runner++;
     }
     max = Math.max(max,runner-walker);
     return max;
 }

【算法】查找字符串中无重复最长子串的长度

标签:

原文地址:http://blog.csdn.net/u010515761/article/details/43451163

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