小红有一个字符串,她可以进行以下操作:
- 拆分。把 'w' 拆成2个 'v',’m‘ 拆成 2个 'n'。
- 轴对称。把 'b' 轴对称成 'd' ,'p' 轴对称成 'q',反之亦然。
- 翻转。把 'b' 翻转成'q',把 'd' 翻转成 'p',把' n' 翻转成 'u',反之亦然。
第一行输入一个整数表示询问次数。
接下来行,每行输入一个字符串表示询问。
所有字符串长度之和不超过。
输出行,每行输出 "YES" 或 "NO" 表示是否可以变成回文串。
5 wovv bod pdd moom lalalai
YES YES YES YES NO
第一个字符串可以变成:vvovv(将第一个w拆成两个v)第二个字符串可以变成:bob、dod、pop或qoq第三个字符串可以变成:bdb第四个字符串本来就是回文的,不用进行操作第五个字符串不可以变成回文串
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int T = in.nextInt();
while (T-- > 0) {
String str = in.next();
String str1 = str.replace("m", "nn");
String str2 = str1.replace("w", "vv");
int len = str2.length();
boolean flag = true;
for (int i = 0; i < len / 2; i++) {
char c1 = str2.charAt(i);
char c2 = str2.charAt(str2.length() - i - 1);
if ((c1 == 'b' || c1 == 'd' || c1 == 'p' || c1 == 'q') && (c2 == 'b' || c2 == 'd' || c2 == 'p' || c2 == 'q')) continue;
if ((c1 == 'n' || c1 == 'u') && (c2 == 'n' || c2 == 'u')) continue;
if (c1 != c2) {
flag = false;
break;
}
}
if (flag) System.out.println("YES");
else System.out.println("NO");
}
}
}
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
private static final Set<Character> set1 = new HashSet<>();
private static final Set<Character> set2 = new HashSet<>();
static {
set1.add('d');
set1.add('p');
set1.add('q');
set1.add('b');
set2.add('u');
set2.add('n');
}
private static String s;
private static int i ,j;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int t = in.nextInt();
while (t-- > 0) {
s = in.next();
i = 0;
j = s.length() - 1;
System.out.println(f() ? "YES" : "NO");
}
}
private static boolean f() {
while (i <= j && ((s.charAt(i) == s.charAt(j)) || judge())) {
i++;
j--;
}
return i >= j;
}
private static boolean judge() {
if (set1.contains(s.charAt(i)) && set1.contains(s.charAt(j))) return true;
else if (set2.contains(s.charAt(i)) && set2.contains(s.charAt(j))) return true;
else if (set1.contains(s.charAt(i)) || set1.contains(s.charAt(j))) return false;
else {
StringBuffer sb = new StringBuffer();
if (s.charAt(i) == 'w' && s.charAt(j) == 'v') {
sb.append(s, 0, i);
sb.append("vv");
++j;
s = sb.toString() + s.substring(i + 1);
return true;
} else if (s.charAt(i) == 'v' && s.charAt(j) == 'w') {
sb.append(s.substring(0, j));
sb.append("vv");
s = sb.toString() + s.substring(j + 1);
++j;
return true;
} else if (s.charAt(i) == 'm' && (s.charAt(j) == 'n' || s.charAt(j) == 'u')) {
sb.append(s.substring(0, i));
sb.append("nn");
++j;
s = sb.toString() + s.substring(i + 1);
return true;
} else if (s.charAt(j) == 'm' && (s.charAt(i) == 'n' || s.charAt(i) == 'u')) {
sb.append(s.substring(0, j));
sb.append("nn");
s = sb.toString() + s.substring(j + 1);
++j;
return true;
} else return false;
}
}
}
//b d q p
//w -> v v
//m -> u u n n u n