查找最长的没重复字母的子串:
思路是通过hashmap以及两个指针,第二个指针不断读入新的字母并把未重复的字母索引存入hashmap。当遇到重复字母,第二个指针移动到hashmap中的索引位置后面,并更新子串长度。
/**
* Created by marsares on 15/6/2.
*/
public class LongestSubstring {
int[]ht=new int[130];
public int lengthOfLongestSubstring(String s) {
for(int i=0;i<130;i++){
ht[i]=-1;
}
char[]characters=s.toCharArray();
if(s.length()==1)return 1;
if(s.length()==0)return 0;
ht[characters[0]]=0;
int i=0;
int j=1;
int max=1;
while(j<s.length()){
if(ht[characters[j]]!=-1&&ht[characters[j]]>=i){
if(max<j-i)max=j-i;
i=ht[characters[j]]+1;
}
ht[characters[j]]=j;
j++;
}
if(max<j-i){
max=j-i;
}
return max;
}
public static void main(String[]args){
LongestSubstring ls=new LongestSubstring();
System.out.println(ls.lengthOfLongestSubstring("qwnfenpglqdq"));
}
}