首页 > 代码库 > Longest Substring Without Repeating Charactersdf

Longest Substring Without Repeating Charactersdf

 

首先呢 可能会想到用一个windows去放这些东西.

可能会想到hashtable去. 但是hashtable 无法用Index去查询. 

abcabcbb.      hashtable:  abc       当第二个a来的时候, 我们想bca  貌似不好实现.

这种情况就很像LRU.  用 node<prev,next>连接,用hashtable<key,node>去记录位置.

这就很麻烦了,有没有别的选择呢?

 

字符反而比integer的这种类型题要简单,因为最多就256种可能性. 可以看成有限制的integer类型题.所以不要心存恐惧啦.

 you would need two indices to record the head and the tail of the current substring.   两个index完美的window.

 

Ok.所以我们需要two index完成window. c[256]记录location. 

 

public class Solution {public int lengthOfLongestSubstring(String s) {        // Start typing your Java solution below        // DO NOT write main() function        int length = s.length();        if (length == 0) {            return 0;        }        int [] countTable = new int[256];        Arrays.fill(countTable, -1);        int max = 1;        int start = 0;        int end = 1;                countTable[s.charAt(0)] = 0;        while (end < length) {            //Has not reached a duplicate char            if (countTable[s.charAt(end)] >= start) {                start = countTable[s.charAt(end)] + 1;                            }            max = Math.max(max, end - start + 1);            countTable[s.charAt(end)] = end;            end++;        }        return max;    }}

 

 

 

Longest Substring Without Repeating Charactersdf