最大回文前缀
来源:互联网 发布:网络走线cad图 编辑:程序博客网 时间:2024/06/02 05:18
题目
求一个字符串的最大回文前缀长度。回文是指正反方向读起来都一样的字符串,比如“abcdcba”就是一个回文。 那么abccba的长度为6。列子2:10010的回文长度为4。列子3:sogou的回文长度是1,因为就一个a。
解析
这个题目是求回文前缀的长度,因为是前缀所以意思就是从第一个字符开始如果有回文的话,这个回文长度为多少。那么有俩种算法都是O(n2),第一种从头遍历,第二种从尾遍历。N的平方是根据,这样来的,对于第一种情况字符串全是同一个字符的话,那么每次都要求回文所以是N的平方。对于第二种abaaaaa,这种情况也是每次都要求回文也是N的平方,虽然回文是1。
差别在于第二种最优为O(N)
我是这样想的,先遍历字符串,如果遇见与第一个字符相等的字符的话,我们先看下这个字符是否是回文,如果是回文返回长度。不是继续遍历。
第一种遍历的话,如果第一个子串是回文,那么我们如果在后面在遇到了与第一个字符相等的字符的话,还是要看下新的子串是否是回文。
第二种遍历的话,如果第一个子串是回文直接结束,如果不是的话继续从上一次的end位置往后面遍历。
代码
#include<iostream>#include<string>#include<algorithm>using namespace std;int Fun(char*start, char*end){ int ret = end - start + 1; while (start<end) { if (*start == *end) { start++; end--; } else{ return 1; } } return ret;}int main(){ string s; cin >> s; int start = 0; int ret = 1; int size = s.size(); int end = size - 1; while (start<end) { if (s[end] == s[0]) { ret = std::max(ret, Fun(&s[start], &s[end])); } if (ret>1) break; end--; } cout << ret << endl; return 0;}
阅读全文
0 0
- XXX-最大回文前缀
- 最大回文前缀
- 最长回文串前缀
- 算法:求一个字符串中存在的回文字符串的最大前缀
- javascript求一个字符串的最大回文前缀长度(搜狗2017秋招真题)
- 一个字符串的最大回文前缀长度(搜狗2017秋招真题)
- 一个字符串的最大回文前缀长度(搜狗2017秋招真题)
- 最大回文
- 最大数 回文
- 最大回文数问题
- 找最大的回文
- 最大回文子字符串
- URAL1297 最大回文字串
- 最大的回文数
- 最大回文字符串
- 寻找最大回文
- 最大回文子串
- 找到最大回文
- 关于IDEA菜单之间有间距的问题
- 9章 档案压缩打包
- break 和continue的用法 java——CSDN
- 你所不了解的五条面试忠告
- 2017年七夕
- 最大回文前缀
- 使用 OKHttpClient的POST方式
- 哈希函数之字符串
- 设置的crontab脚本无法启动、关闭tomcat解决
- Q-learning 算法工作原理
- 动态创建sprite
- 【Java学习笔记】33:Set接口及其实现类
- Mysql命令行备份与还原数据库操作实例
- python中BeautifulSoup简单使用