3.Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters.

最简单的解决方式,逐渐遍历

time:o(n^2)

space:o(n)

 public int lengthOfLongestSubstring(String s) {
        int len=s.length();
        int result=0;
        
        for(int i=0;i<len;i++){
            HashSet<Character> set=new HashSet<Character>();
            for(int j=i;j<len;j++){
                if(set.contains(s.charAt(j)))
                    break;
                else
                    set.add(s.charAt(j));
            }
            if(result<set.size())
                result=set.size();
            if(result>len-i)
                break;
        }
        
        return result;
    }



改进一点:

time: o(n)

space: o(n)

将每个字符及其顺序保存在map中,循环遍历,保留2个指针,一个指针指向当前位置i,一个指向开始保证从开始字符开始到当前字符没有出现过重复的j;若当前字符在之前出现过,则更新j,j应该是j和当前第i个字符在之前出现的位置的最大值;

public int lengthOfLongestSubstring(String s) {
        if(s==null||s.length()==0)
            return 0;
        int max=1;
        HashMap<Character,Integer> map=new HashMap<Character,Integer>();
        for(int i=0,j=0;i<s.length();i++){
            if(map.containsKey(s.charAt(i))){
                if(j<(map.get(s.charAt(i))+1))
                    j=map.get(s.charAt(i))+1;
            }
            map.put(s.charAt(i),i);
            if(max<(i-j+1))
                max=i-j+1;
        }
        return max;
    }


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_17451213/article/details/52384135
个人分类: leetcode
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

3.Longest Substring Without Repeating Characters

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭