这是一个字符串处理问题,我们需要判断给定的字符串是否满足轴对称的性质:
- 首先,我们需要明确轴对称的规则:单个字母自身对称的有:i、l、m、n、o、u、v、w、x。互相对称的字母对有:p 和 q、b 和 d。其他字母都不是对称的。
- 判断方法:从字符串两端向中间比较。左边第 个字符与右边第 个字符必须满足对称关系。如果某一对字符不满足对称关系,则整个字符串不是轴对称的。
- 具体实现:创建一个映射表,指定每个字符的对称字符。使用双指针法,从两端向中间遍历并比较。
import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); // 构建对称字符映射表 Map<Character, Character> symMap = new HashMap<>(); String selfSym = "ilmnouvwx"; for (int i = 0; i < selfSym.length(); i++) { char c = selfSym.charAt(i); symMap.put(c, c); } symMap.put('b', 'd'); symMap.put('d', 'b'); symMap.put('p', 'q'); symMap.put('q', 'p'); for (int i = 0; i < n; i++) { String s = sc.next(); boolean isSymmetric = true; int left = 0, right = s.length() - 1; while (left <= right) { char leftChar = s.charAt(left); char rightChar = s.charAt(right); if (!symMap.containsKey(leftChar) || symMap.get(leftChar) != rightChar) { isSymmetric = false; break; } left++; right--; } System.out.println(isSymmetric ? "Yes" : "No"); } } }