import java.util.HashMap;
import java.util.Map;
/*
找出字符串的最長不重復子串,輸出長度
-
/
public class FaceFive {
/該題,可以用hash解
字符的個數是有限的255
所以采用數組255來做字符保存
從頭到尾,掃描,用期間最長的長度作為跨度,一步一步推進 maxlen=j-i
與之前的max最比較得出最大的數
-
*/
private static int getResult(String value){
if(value==null||value.length()==0)
return 0;
char[] s=value.toCharArray();
int i = 0, j = 0;
int n = s.length;
int maxLen = -1;
boolean exists[] = new boolean[256];while (j < n)
{
if (exists[s[j]])
{
maxLen = Math.max(maxLen, j - i);
System.out.println(j+"-"+i+"="+(j-i));
while (s[i] != s[j])//遇到相同的字符則直接退出
{
exists[s[i]] = false;//在當前最大的長度區間內不同字符設置為false
i++;
}
i++;//代表跳過一個位置
}
else
{
exists[s[j]] = true;
}
j++;
}
/*- 考慮到所有字符都不同且長度<255的情況
maxLen并沒有進入while循環中而沒有更新
要在最后更新一次 - */
maxLen = Math.max(maxLen, j - i);
return maxLen;
} - 考慮到所有字符都不同且長度<255的情況
public static void main(String[] args) {
String value=new String("abaaabcdefdde");
System.out.println(" "+getResult(value));
}
}