import java.util.HashMap;
import java.util.Map;
/*
找出字符串的最長(zhǎng)不重復(fù)子串,輸出長(zhǎng)度
-
/
public class FaceFive {
/該題,可以用hash解
字符的個(gè)數(shù)是有限的255
所以采用數(shù)組255來做字符保存
從頭到尾,掃描崩哩,用期間最長(zhǎng)的長(zhǎng)度作為跨度,一步一步推進(jìn) maxlen=j-i
與之前的max最比較得出最大的數(shù)
-
*/
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;//在當(dāng)前最大的長(zhǎng)度區(qū)間內(nèi)不同字符設(shè)置為false
i++;
}
i++;//代表跳過一個(gè)位置
}
else
{
exists[s[j]] = true;
}
j++;
}
/*- 考慮到所有字符都不同且長(zhǎng)度<255的情況
maxLen并沒有進(jìn)入while循環(huán)中而沒有更新
要在最后更新一次 - */
maxLen = Math.max(maxLen, j - i);
return maxLen;
} - 考慮到所有字符都不同且長(zhǎng)度<255的情況
public static void main(String[] args) {
String value=new String("abaaabcdefdde");
System.out.println(" "+getResult(value));
}
}