字符串水题
2014-03-05 21:37
141 查看
题意:给定一个字符串str,要求你只能在字符串的头部或尾部添加任意字符,使得最后的字符串是一个回文字符串并且满足字符串的长度最短,问最少需要添加几个字符。
分析:首先先看一下,什么是回文?回文有两种形式,(1)是xxxcxxx,(2)是xxxccxxx。分别表示的是长度为奇数和偶数的回文串
对于一个长度为len的字符串,要求你只能在字符串的头部或尾部添加任意字符使之成为回文字符串的话。那么最坏的情况“是把第一个字符或最后一个字符做为中间字符,添加剩下的len-1个字符到另一边,并且最后的得到的回文串长度为奇数”,比如给定一个字符串“adah”,那么最坏的情况就是“hadadah”或“adahada”
但是我们发现这个情况是错的,因为我们忽略了最好的情况。一个字符串可能本来就是一个回文串,比如“aba”,那么分析题目我们可以得到结论
给定一个长度为len的字符串,只能在字符串的头部或尾部添加任意字符使之成为回文字符串的话。需要添加的字符数量是0~(len-1)
那么我们只要分别对头部和尾部进行枚举0~(len-1),然后找到最少的添加的个数就是答案
代码
/* Author: chenguolin Date: 2014-03-05 */ #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int MAXN = 100010; // 判断是否是回文 bool isOk(char *str){ int len = strlen(str); int i = 0, j = len-1; while(i < j){ if(str[i] != str[j]) return false; i++, j--; } return true; } // 加在头部 int getHead(char *str){ int len = strlen(str); // 枚举添加0~len-1个字符 for(int i = 0; i < len; i++){ char tmpStr[MAXN]; int pos = 0, j = len-1; while(pos < i){ tmpStr[pos++] = str[j--]; } strcat(tmpStr, str); if(isOk(tmpStr)) return i; } } // 加在尾部 int getTail(char *str){ int len = strlen(str); // 枚举添加0~len-1个字符 for(int i = 0; i < len; i++){ char tmpStr[MAXN]; memcpy(tmpStr, str, sizeof(str)); int pos = len, j = 0; while(j < i){ tmpStr[pos++] = str[j++]; } tmpStr[pos] = '\0'; if(isOk(tmpStr)) return i; } } int main(){ char str[MAXN]; scanf("输入一个字符串:%s", str); int head = getHead(str); // 得到在头部添加字符需要几个 int tail = getTail(str); // 得到在尾部添加字符需要几个 printf("最少需要添加:%d\n", min(head, tail)); }
这个代码没有经过编译和测试,是lz临时想到就写得,欢迎广大博友来拍砖。
相关文章推荐
- matlab矩阵求逆:inv pinv \ / 斜线运算符的选择
- 菜鸟Java学习笔记01--了解JDK开发环境
- 使用SQLServer配置管理器配置SQLServer数据库引擎实例,以便侦听特定的固定1433端口。 推荐
- 丁老师的作业_修改并运行“简单签到程序”
- java程序设计中的流程控制总结
- iOS Block
- LinuxCast学习笔记十四:help
- POJ3133
- 支持向量机通俗导论(理解SVM的三层境界)
- 求1+2+…+n,要求不能使用乘除法等
- 使用JUnit测试预期异常
- tibco.ems.illegalstateexception illegal use of receive() from multiple threads
- 先挖个大坑
- int main(int argc,char* argv[])详解
- 有关String对象的一个面试题
- 观察者模式
- 微信公共服务平台开发(.Net 的实现)9-------处理二维码
- UML用例图的作用、功能模块图作用与数据库设计三者关系
- 32位+2G+Win7系统,如何解决out of memory问题
- 【转】CUDA5/CentOS6.4