关闭

3.Longest Substring Without Repeating Characters

52人阅读 评论(0) 收藏 举报
分类:
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;
    }


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:25026次
    • 积分:1746
    • 等级:
    • 排名:千里之外
    • 原创:157篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条