判断一个字符串能否通过添加一个字符变成回文串
2015-09-21 16:57
435 查看
蘑菇街笔试题目: 判断一个字符串能否通过添加一个字符变成回文串
相关概念:
“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。
回文可分为两种:偶数回文和奇数回文,偶数回文中间两个字符相同,奇数回文中间只有一个字符;
题目可以分为三种情况:
(1)原字符串即为回文串,直接在中间添加和中间字符相同的字符即可;
(2)缺少一个字符,找出缺少位置;
(2)缺少多个字符,无法[b]通过添加一个字符改造为回文字符;[/b]
相关概念:
“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。
回文可分为两种:偶数回文和奇数回文,偶数回文中间两个字符相同,奇数回文中间只有一个字符;
题目可以分为三种情况:
(1)原字符串即为回文串,直接在中间添加和中间字符相同的字符即可;
(2)缺少一个字符,找出缺少位置;
(2)缺少多个字符,无法[b]通过添加一个字符改造为回文字符;[/b]
#include<stdio.h> #include<iostream> #include<string> using namespace std; int main() { char str[30]; gets(str); int len=strlen(str); int i=0,j=len-1; int countdif=0; while(i<j) { if(str[i]==str[j]) //首尾相向比较 { i++; j--; } else { if(str[i+1]==str[j]||str[i]==str[j-1]) //判断是否为缺失位 { str[i+1]==str[j] ? i++: j-- ; countdif++; } else { countdif=2; break; } } } switch(countdif) { case 0: cout<<"本来就是回文字串"<<endl;break; case 1: cout<<"可以改造为回文子串"<<endl;break; default: cout<<"不可以改造为回文子串"<<endl;break; } return 0; }
相关文章推荐
- 用elasticsearch-river-jdbc同步数据到elasticsearch
- malloc内存分配详解
- 冒泡排序算法
- 在ios开发中,使用钥匙来保存用户密码和账号
- 单例模式
- 推荐学习前端知识不错的网站
- 第4周 项目2 建设“单链表”的算法库
- 比较和排序(IComparable和IComparer以及它们的泛型实现)
- 数据加密介绍<2>
- 三维气象要素场--WebGL篇
- webpack+react问题汇总
- mysql常用引擎
- XML创建、读取、追加的例子
- 技术管理者培训小结五: 研发团队常见问题
- matlab(3) Logistic Regression: 求cost 和gradient \ 求sigmoid的值
- 第三周,项目一
- OpenDaylight中MD-SAL学习笔记
- delegate详解
- C#例题3-1简单的程序
- Java并发编程:深入剖析ThreadLocal