java 得到無重複的最長字串長度
阿新 • • 發佈:2018-12-09
給定一個字串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; } }
控制檯輸入字串即可得到結果。