1. 程式人生 > >java 得到無重複的最長字串長度

java 得到無重複的最長字串長度

給定一個字串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;
	}

}

控制檯輸入字串即可得到結果。