题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=342

题目意思:判断一行字符串为以下四种的哪一种:A regular palindrome,A mirrored string,A mirrored palindrome 和 is not a palindrome。A regular palindrome 就是我们见得最多的普通回文字符串,正读和反读是一样的;A mirrored string 就是根据以下的一套规则,将每个character变成对应的reverse,变完之后反读起来是和原来的字符串是一样的。

比较坑爹的一个地方是,对于B、C、D、F、G、K...6、7 这些没有reverse的字符,如果字符串里有这些字符,就绝对不是mirrored string了。还有就是记得,输出每一行结果之后,还要追加一个空行!

 #include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
using namespace std; const int maxn = + ;
char s[maxn], rev[maxn];
int len, l; char test[] = {'B', 'C', 'D', 'F', 'G', 'K', 'N', 'P', 'Q', 'R', '', '', '', ''}; // 非 mirrored 的 字符
char match[] = {'E', 'J', 'L', 'S', 'Z', '', '', ''};
char match1[] = {'', 'L', 'J', '', '', 'S', 'E', 'Z'}; bool Is_palindrome()
{
for (int i = ; i <= len/; i++)
{
if (s[i] != s[len-i-])
return false;
}
return true;
} bool check()
{
for (int j = ; j < len; j++)
{
for (int i = ; i <= ; i++)
{
if (s[j] == test[i]) // 找到一个非mirrored 的 字母,就不可能是mirrored string了
return false;
}
}
return true;
} bool Is_mirrored()
{
int f;
l = ;
for (int i = ; i < len; i++)
{
f = ;
for (int j = ; j < ; j++)
{
if (s[i] == match[j])
{
rev[l++] = match1[j]; // 替换该字符的reverse
f = ;
}
}
if (!f) // reverse 与 它本身一样,例如A、I
rev[l++] = s[i];
}
for (int j = l-; j >= ; j--)
if (rev[j] != s[l-j-])
return false;
return true;
} int main()
{
while (scanf("%s", s) != EOF)
{
len = strlen(s);
  if (Is_palindrome())
  {
   if (check() && Is_mirrored())
   printf("%s -- is a mirrored palindrome.\n\n", s);
   else
   printf("%s -- is a regular palindrome.\n\n", s);
   }
   else
   {
  if (check() && Is_mirrored())
  printf("%s -- is a mirrored string.\n\n", s);
   else
  printf("%s -- is not a palindrome.\n\n", s);
  }
}
return ;
}

最新文章

  1. Linux添加主机路由
  2. Caffe 源碼閱讀(二) SyncedMemory.hpp
  3. [Effective JavaScript 笔记]第49条:数组迭代要优先使用for循环而不是for...in循环
  4. windows下android开发环境搭建
  5. AnimateWindow 阻塞当前线程问题
  6. ADO.NET对象模型
  7. Mac 下 Scala 平台搭建
  8. (Problem 9)Special Pythagorean triplet
  9. kinect2 body joints 的25个点
  10. FitVids,一个轻视频插件,操作简单
  11. C#调用Oracle的存储过程时,连接字符串需要配置PLSQLRSet=1
  12. Leetcode#557. Reverse Words in a String III(反转字符串中的单词 III)
  13. pascalcontext-fcn全卷积网络结构理解
  14. windows计划任务启动bat执行java文件
  15. XSS测试代码
  16. SQL中的 group by 1, order by 1 语句
  17. ajax的基础
  18. September 03rd 2017 Week 36th Sunday
  19. windows curl ssl版本号编译
  20. js 内存泄漏

热门文章

  1. Linux下快速删除输错的密码技巧(快速删除输入的命令)
  2. ArcGIS for Android地图控件的5大常见操作转
  3. 【IntelliJ idea/My/ecplise】启动项目前,修改配置JVM参数
  4. WPA2密钥重装攻击原理分析
  5. iOS集成百度地图方法步骤
  6. myBatis-plus异常提示For input string: &quot;{0=null}&quot;
  7. D3js-API介绍【英】
  8. 无法访问gcr.io的几种解决办法
  9. kubernetes之PDB
  10. input 的read only 和 disable的区别