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;
	}

}

控制台输入字符串即可得到结果。

猜你喜欢

转载自blog.csdn.net/yincheng_917/article/details/82685917