您的位置:首页 > 其它

UVaOJ 401 - Palindromes

2012-09-10 13:07 309 查看
AOAPC
I: Beginning Algorithm Contests (Rujia Liu) :: Volume 1. Elementary Problem Solving :: String

Description

给一段字符串,判断是否为回文串或者镜像串。

Type

String

Analysis

定义两个指针,一个从前往后,一个从后往前。

对两个指针指向的字符进行匹配即可。

对于题目给的匹配表,定义个字符常量数组来map即可。

注意镜像串的中间唯一字符,自身必须是个镜像字符。

Solution

// UVaOJ 401
// Palindromes
// by A Code Rabbit

#include <cstdio>
#include <cstring>

const char LETTER_REVERSE[] = {
'A', ' ', ' ', ' ', '3', ' ', ' ',
'H', 'I', 'L', ' ', 'J', 'M', ' ',
'O', ' ', ' ', ' ', '2', 'T',
'U', 'V', 'W', 'X', 'Y', 'Z'
};

const char NUMBER_REVERSE[] = {
' ', '1', 'S', 'E', ' ', 'Z', ' ', ' ', '8', ' '
};

char str[100];

int main() {
while (gets(str)) {
bool palindrome = true;
bool mirrored = true;
for (int i = 0, j = strlen(str) - 1; i <= j; i++, j--) {
if (str[i] != str[j])
palindrome = false;
if ('A' <= str[i] && str[i] <= 'Z') {
if (LETTER_REVERSE[str[i] - 'A'] != str[j])
mirrored = false;
} else {
if (NUMBER_REVERSE[str[i] - '0'] != str[j])
mirrored = false;
}
}
printf("%s -- ", str);
if (palindrome && mirrored)
printf("is a mirrored palindrome.\n");
else if (palindrome && !mirrored)
printf("is a regular palindrome.\n");
else if (!palindrome && mirrored)
printf("is a mirrored string.\n");
else
printf("is not a palindrome.\n");
printf("\n");
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: