publicclass 完美走位 {staticint minT =1000000;staticString walk;staticint w, s, a, d, avg;publicstaticvoidmain(String[] args){// walk = "AAAA";Scanner scanner =newScanner(System.in);
walk = scanner.nextLine().toUpperCase();
avg = walk.length()/4;
w =Math.max(walk.replaceAll("[^W]","").length()- avg,0);
s =Math.max(walk.replaceAll("[^S]","").length()- avg,0);
a =Math.max(walk.replaceAll("[^A]","").length()- avg,0);
d =Math.max(walk.replaceAll("[^D]","").length()- avg,0);solveP();}staticvoidsolveP(){if(w == s && s == a && a == d){// 完美情况System.out.println(0);return;}System.out.println(containstr(0, w + s + a + d -1, minT));}staticintcontainstr(int head,int tail,int minT){if(tail > walk.length()){return minT;// 越界即结束}if(countOccurrences(walk.substring(head, tail),'W')>= w
&&countOccurrences(walk.substring(head, tail),'S')>= s
&&countOccurrences(walk.substring(head, tail),'A')>= a
&&countOccurrences(walk.substring(head, tail),'D')>= d
){// 我们只需要考虑多余的wasd数量即可
minT =Math.min(minT, tail - head);// 更新minTreturncontainstr(head +1, tail, minT);// 右边框右滑}else{returncontainstr(head, tail +1, minT);// 左边框右滑}}staticintcountOccurrences(String str,char ch){int length = str.replaceAll("[^"+ ch +"]","").length();return length;}}