欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

回文词 Palindrome,UVa 401《算法竞赛入门经典》(Java语言)

程序员文章站 2022-03-13 20:50:42
...

《算法竞赛入门经典》P48

输入一个字符串,判断它是否为回文串以及镜像串。输入字符串保证不含数字0。所谓 回文串,就是反转以后和原串相同,如abba和madam。所有镜像串,就是左右镜像之后和原

串相同,如2S和3AIAE。注意,并不是每个字符在镜像之后都能得到一个合法字符。在本题 中,每个字符的镜像如图3-3所示(空白项表示该字符镜像后不能得到一个合法字符)。

回文词 Palindrome,UVa 401《算法竞赛入门经典》(Java语言)

图3-3 镜像字符
输入的每行包含一个字符串(保证只有上述字符。不含空白字符),判断它是否为回文 串和镜像串(共4种组合)。每组数据之后输出一个空行。
样例输入:
NOTAPALINDROME
ISAPALINILAPASI
2A3MEAS
ATOYOTA
样例输出:
NOTAPALINDROME -- is not a palindrome.
ISAPALINILAPASI -- is a regular palindrome.
2A3MEAS -- is a mirrored string.

ATOYOTA -- is a mirrored palindrome.

还是使用常量串的问题。另外,在Virtual Judge上提交时,由于没有注意样例输出的格式,导致多次WA,需要注意。

import java.util.Scanner;

public class Main {
	private static int getIndex(char c)
	{//返回在镜像串常量数组中对应的下标
		if(c>='A'&&c<='Z')
		{
			return (c-'A');
		}else
		{
			return (c-'0'+25);
		}
	}
	public static void main(String[] args) {
		String mir="A   3  HIL JM O   2TUVWXY51SE Z  8 ";
		String[] answer={" -- is not a palindrome."," -- is a regular palindrome.",
				" -- is a mirrored string."," -- is a mirrored palindrome."};
		Scanner in=new Scanner(System.in);
		while(in.hasNextLine())
		{
			boolean isMirrored=true,isPalindrome=true;//每循环一次重新定义一次标志量,防止前一次的结果对其造成影响
			String input=in.nextLine();
			for(int i=0;i<(input.length()/2)+1;i++)
			{
				if(input.charAt(i)!=input.charAt(input.length()-1-i))
				{
					//System.out.println(input.charAt(i)+","+input.charAt(input.length()-1-i));
					isPalindrome=false;
				}
				if(mir.charAt(getIndex(input.charAt(i)))!=input.charAt(input.length()-1-i))//当第i个字母的镜像字与对称的那个字母不相等时
				{
					//System.out.println(mir.charAt(getIndex(input.charAt(i)))+","+input.charAt(input.length()-1-i));
					isMirrored=false;
				}
			}
			System.out.print(input);
			if(!isMirrored&&!isPalindrome)
			{
				System.out.println(answer[0]);
			}else if(!isMirrored&&isPalindrome)
			{
				System.out.println(answer[1]);
			}else if(isMirrored&&!isPalindrome)
			{
				System.out.println(answer[2]);
			}
			else
			{
				System.out.println(answer[3]);
			}
			System.out.println();
		}
		in.close();
	}
}