【LeetCode】3. Longest Substring Without Repeating Characters

来源:互联网 发布:java源代码文件夹在 编辑:程序博客网 时间:2024/05/22 00:13

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.


题意:题意很简单,就是给定一个字符串,从中找到最长的不包含重复字符的子串,并返回其长度。

思路:利用kmp的思想加以优化,不断向右扫描并记录该字符所在的位置。遇到重复,则将扫描位置移动到该字符所记录位置的右侧,继续扫描。可以用数组或map实现。

代码如下:

    public int lengthOfLongestSubstring(String s) {        int max = 0, now = 0,i , j;        int pos[] = new int[128];        Arrays.fill(pos, -1);        for (i = 0;i < s.length();i++){            now = 1;            pos[s.charAt(i)] = i;            for (j = i + 1;j < s.length();j++){                if (pos[s.charAt(j)] > -1){                    break;                }                pos[s.charAt(j)] = j;                now++;            }            if (now > max){                max = now;            }            if (j < s.length()){                i = pos[s.charAt(j)];            }            Arrays.fill(pos, -1);        }        return max;    }   public int lengthOfLongestSubstring(String s) {        if (s.length()==0) return 0;        HashMap<Character, Integer> map = new HashMap<Character, Integer>();        int max=0;        for (int i=0, j=0; i<s.length(); ++i){            if (map.containsKey(s.charAt(i))){                j = Math.max(j,map.get(s.charAt(i))+1);            }            map.put(s.charAt(i),i);            max = Math.max(max,i-j+1);        }        return max;    }

阅读全文
0 0
原创粉丝点击