给定一个字符串,找出其没有重复字符的最长的子字符串。例如qpxrjxkltzvx
package com.algorithm.coding.puzzles;
public class NonRepeatSubstring51 {
public String length(String str){
int[] count = new int[26];
for(int i = 0 ; i < count.length ; i++){
count[i] = -1;
}
char[] c = str.toCharArray();
int len = 0, maxL = 0;
int end = 0;
for(int i= 0; i < c.length; i++){
if(i == c.length -1){
if(count[c[i] - 'a'] == -1){
count[c[i] - 'a'] = i;
len ++;
if(len > maxL) {
maxL = len;
end = i+1;
}
}else{
if(len > maxL) {
maxL = len;
end = i;
}
len = 1;
i = count[c[i] - 'a'] + 1;
this.initArr(count);
count[c[i] - 'a'] = i;
}
}else{
if(count[c[i] - 'a'] == -1){
count[c[i] - 'a'] = i;
len ++;
}else{
if(len > maxL) {
maxL = len;
end = i;
}
len = 1;
i = count[c[i] - 'a'] + 1;
this.initArr(count);
count[c[i] - 'a'] = i;
}
}
}
return str.substring(end-maxL, end);
}
public void initArr(int[] arr){
for(int i = 0; i < arr.length; i++ ){
arr[i] = -1;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
NonRepeatSubstring51 nonRepeat = new NonRepeatSubstring51();
String str = "qpxrjxkltzvx";
System.out.println(nonRepeat.length(str));
}
}