给定一个字符串str,返回str的最长无重复字符串的长度。
例如:
str="abc",则返回3.
str="aabcd",则返回4.
具体代码实现如下:
package Test;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class DistinctSubstring {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
String A=input.next();
Map<Character, Integer> charPosition = new HashMap<Character, Integer>();
int[] preArr = new int[A.length()];
char[] str2charArr = A.toCharArray();
for (int i = 0; i < A.length(); i++) {
Integer lastPosOfChar = charPosition.get(str2charArr[i]);
if (lastPosOfChar == null) {
preArr[i] = i == 0 ? 1 : preArr[i - 1] + 1;
charPosition.put(str2charArr[i], i);
}
else {
int aPos = lastPosOfChar + 1;
int unRepeatLen = preArr[i - 1];
int bPos = i - unRepeatLen;
if (aPos >= bPos) {
preArr[i] = i - aPos + 1;
}
else {
preArr[i] = i - bPos + 1;
}
charPosition.put(str2charArr[i], i);
}
}
int max = preArr[0];
for (int i : preArr)
if (i > max)
max = i;
System.out.println(max);
//return max;
}
}
控制台输入字符串即可得到结果。