CF 420A.Start Up(Java实现)
题目分析
乍一看这个题像是字符版的回文数,但是这里说到的是镜子对照,所以部分字母在镜子对照后会与原字母朝向不同等情况,此情况时就要排除
思路分析
那么首先我们需要确认输入的字母在镜子对照前后始终如一,其次应该是回文字符串,不满足任一情况都“NO”
代码
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
char[] arr=sc.nextLine().toCharArray();//输入的值分成字符存储
ArrayList<Character> list=new ArrayList<>();//用于存输入的值
ArrayList<Character> alist=new ArrayList<>();//用于存不符合要求的字母
for (char c:
arr) {
list.add(c);//存输入的值
}
alist.add('B');
alist.add('C');
alist.add('D');
alist.add('E');
alist.add('F');
alist.add('G');
alist.add('J');
alist.add('K');
alist.add('L');
alist.add('N');
alist.add('P');
alist.add('Q');
alist.add('R');
alist.add('S');
alist.add('Z');//以上字母不满足条件,镜子对照后不同//当然你也可以用其他聪明的存值方式
String re="YES";//初始化答案
for (int i = 0; i < arr.length/2; i++) {//回文对比只看两端所以长度是length/2
if (arr[i]!=arr[arr.length-1-i]){//比交首位
re="NO";//不相同就修改答案
break;//错误就结束
}//当然你也可以用其他的函数比如reverse
}
list.retainAll(alist);//此题我用的最重要的函数,retainall,相当于是交集函数,看list和alist是否有相同的元素,如果有说明list中就有不满足条件的字母//此函数会更新list的值所以放在回文确认之后
if (list.size()>0){//此时list已被更新,如果size>0说明有相交
re="NO";//则输出为NO
}
System.out.println(re);
}
}
感谢您能够看到这里,一起见证小何同学的算法学习,如果您有不同的见解,希望能得到您的指点和点悟;如果您是和我一样的同学,也希望这篇文章能对您有所帮助。