首页 > 编程语言 > 详细

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

时间:2015-02-04 16:35:16      阅读:238      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!