pat 中求解最长回文串的长度
2017-06-20 22:26
225 查看
本以为暴力枚举会超时,但竟然过了。。。
#include <string>
#include <stdio.h>
#include <iostream>
int longestPalindrome(string s) {
int left = 0, right = s.length() - 1;
//为奇数时
int len1 = 0;
int len2 = 0;
int start1 = left;//标记起始点
int start2 = left;
for (int i = 0; i < s.length(); i++)
{
left = i;
right = i;
while (left >= 0 && right<s.length())
{
if (s[left] == s[right])
{
if (right - left + 1>len1)
{
len1 = right - left + 1;
start1 = left;
}
left--;
right++;
}
else
{
break;//重新找
}
}
}
//为偶数长度时
for (int i = 0; i < s.length() - 1; i++)
{
left = i;
right = i + 1;
while (left >= 0 && right<s.length())
{
if (s[left] == s[right])
{
if (right - left + 1>len2)
{
len2 = right - left + 1;
start2 = left;
}
left--;
right++;
}
else
{
break;
}
}
}
return len1> len2 ? len1 : len2;
}
int main()
{
//scanf("%s", s);
string s;
getline(cin, s);
int len = longestPalindrome(s);
cout << len << endl;
return 0;
}
#include <string>
#include <stdio.h>
#include <iostream>
int longestPalindrome(string s) {
int left = 0, right = s.length() - 1;
//为奇数时
int len1 = 0;
int len2 = 0;
int start1 = left;//标记起始点
int start2 = left;
for (int i = 0; i < s.length(); i++)
{
left = i;
right = i;
while (left >= 0 && right<s.length())
{
if (s[left] == s[right])
{
if (right - left + 1>len1)
{
len1 = right - left + 1;
start1 = left;
}
left--;
right++;
}
else
{
break;//重新找
}
}
}
//为偶数长度时
for (int i = 0; i < s.length() - 1; i++)
{
left = i;
right = i + 1;
while (left >= 0 && right<s.length())
{
if (s[left] == s[right])
{
if (right - left + 1>len2)
{
len2 = right - left + 1;
start2 = left;
}
left--;
right++;
}
else
{
break;
}
}
}
return len1> len2 ? len1 : len2;
}
int main()
{
//scanf("%s", s);
string s;
getline(cin, s);
int len = longestPalindrome(s);
cout << len << endl;
return 0;
}
相关文章推荐
- Java给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.
- 程序员面试宝典:输入一行字符串,找出其中出现的相同且长度最长的字符串----后缀数组求解
- 求解最长回文子串的长度
- 求解字符串中最长对称字符串长度
- 一种快速求解最长回文字符串长度的算法
- UVa 11404 回文子序列(LCS求最长回文串长度)
- 求解最长回文串 manachar算法
- leetcode-409. Longest Palindrome 最长回文串的长度
- 求解最长回文串(Manacher 算法)——自我总结
- hdoj 3308 LCIS 【线段树单点更新 + 区间合并】【求解最长递增序列 的长度】
- 编程之美hiho一下求最长回文串的长度
- 回文串是指这个字符串无论从左读还是从右读,所读的顺序是一样的;简而言之,回文串是左右对称的。现在,对于一个给定的母串 abcdedcb求最长回文子串的长度
- 腾讯2016实习生笔试题 获得最长回文串长度
- manacher算法求最长回文串长度
- PAT程序设计考题——甲级1040 (最长回文串) C++实现
- 求最长回文串长度板子
- 动态规划法求解矩阵中最长的递增路径的长度
- 最长回文串长度——manacher算法
- POJ 2533 最长上升子序列长度的求解 DP实现
- O(nlgn)求解最长上升子序列长度