求字符串中最大的回文长度
来源:互联网 发布:跑步腰包 知乎 编辑:程序博客网 时间:2024/05/07 00:21
啊,接着上一篇判断字符串是否回文的问题,这一篇来解决另一个问题,求一个字符串当中最长的回文长度。
思路呢,因为考虑到一个任意的字符串,用中心向两边扩散的方法来判断回文是靠谱的。即,如果一段字符串是回文,那么以某个字符为中心的前缀和后缀都是相同的,例如,以“aba”为例,以b为中心,他的前缀和后缀都是相同的a。
这样,我们就从字符串第一个字符开始,然后看它的左边和右边是否相等,当然啦,第一个字符,回文数就是1。
然后第二个字符作为中心,它的左边,第一个字符,它的右边,第三个字符,看这两个字符是否相等,若相等,回文长度就为3=2*1+1了,很好。继续,再往左没字符了,退出当前循环。
紧接着中心字符变成第三个字符,再来看看以第三个字符为中心是不是回文的,如果是,则更新回文长度。
看到这里,我想大家应该想到这是用的两个循环嵌套的,第一个循环用来从头到尾遍历字符串,把每个字符串作为中心元素,然后嵌套循环里看以他为中心是否是回文。
点评:1考察回文判断;2循环问题;3动态规划
// LongestPalindrom(2).cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>int LongestPalindrome(char* str, int length){int i, j, max, current;if (str == NULL || length < 1)return 0;max = 0;for (i = 0; i < length; ++i)//i 看成是中心元素,然后i-j是左边,i+j是右边元素,比较这两个元素是否相等{for (j = 0; (i - j >= 0) && (i + j < length); ++j){if (str[i - j] != str[i + j]) //比较左右对称的元素是否相等,此时i固定,j在增加break;current = 2 * j + 1; //直到不相等,回文结束,此时回文长度为2*j+1}if (current > max)max = current;//如果current的值大于最大记录的回文长度,则更新最大记录;for (j = 0; (i - j >= 0) && (i + j + 1 < length); ++j){if (str[i - j] != str[i + j + 1])break;current = 2 * j + 2;//同理在偶数长度时,回文长度为2*j+2}if (current > max)max = current;//如果current的值大于最大记录的回文长度,则更新最大记录;}return max;}int _tmain(int argc, _TCHAR* argv[]){char *string, *temp;int longest = 0;string = (char*)malloc(50 * sizeof(char));gets_s(string, 50);int n = 0;temp = string;while (*(temp++) != '\0'){n++;}longest = LongestPalindrome(string, n);printf("The longest Palindrome length is:%d", longest);return 0;}
0 0
- 求字符串中最大的回文长度
- 字符串中最大的回文长度
- 面试题5:求字符串中回文子串的最大长度
- 求字符串中的回文最大长度
- 字符串的最大回文长度
- 回文字符串的最大长度
- 字符串中对称字符串的最大长度(最长回文)
- 找到字符串中最大的回文字串的长度
- C#找出字符串中最大长度的回文
- 求最大回文子串的长度
- 求已知字符串的最大回文字符串长度,并输出该字符串
- 关于c++最大回文的字符串长度
- 查找字符串的最大回文长度
- javascript求一个字符串的最大回文前缀长度(搜狗2017秋招真题)
- manacher求最大回文长度
- 字符串中最长的回文字符串长度
- 求字符串的最大回文子串
- 找出字符串中对称的子字符串的最大长度(最长回文)
- 在Mac下安装使用OpenCV
- zabbix—安装agent客户端(linux版)
- struts2之ModelDriven
- cpu原理
- TinyHTTPd 编译及 HTTP 浅析
- 求字符串中最大的回文长度
- Linux字符驱动
- DEV 控制某些行 有些列不可读的方法
- 第十二周 项目三--日期时间类
- 内存原理
- ListView中Item有EditText,焦点问题
- 什么是ROM、RAM、DRAM、SRAM和FLASH的区别
- SSH异常处理方案
- iOS屏幕旋转