一、思路
1.這題去年考的時候想的是使用全排列進行嘗試,實際不用這么麻煩,只用找到第一個和最后一個非特殊字符串的位置,然后分別向內檢查是否對稱,向外檢查是否對稱直到左指針小于0(可以通過添加使其對稱)
2.至于如何找到第一個和最后一個非特殊字符串的位置,這里用的棧,其實很多種方法,設兩個下標記錄,ArrayList等都可以
二、記憶
1.分析題目看看能不能找出規律
三、代碼
import java.util.Scanner;
// 1:無需package
// 2: 類名必須Main, 不可修改
import java.util.Deque;
import java.util.LinkedList;
import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();in.nextLine();for(int i =0;i<n;i++) {String ss = in.nextLine();if(check(ss)) {System.out.println("Yes");}else {System.out.println("No");}}}public static boolean check(String ss) {Deque<Integer> stack = new LinkedList();int n = ss.length();for(int i =0;i<n;i++) {//找到所有非指定字符的位置char temp = ss.charAt(i);if(temp!='l' && temp!='q' && temp!='b') {stack.add(i);}}if(stack.size()==0) {return true;}int left = stack.getLast(),right = stack.getFirst();int l = stack.getLast(),r= stack.getFirst();while(left < right && ss.charAt(left)==ss.charAt(right)) {//兩邊向中間left++;right--;}while(l>=0 && ss.charAt(l) == ss.charAt(r)) {//兩邊向兩邊l--;r++;}if(left>=right && l<0) {return true;}else {return false;}}
}