九度oj 1528 最长回文子串

原题链接:http://ac.jobdu.com/problem.php?pid=1528 
小白书上的做法,不过这个还要简单些。。。

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<cstdio>
 6 using std::max;
 7 const int Max_N = 200010;
 8 char ret[Max_N];
 9 void solve() {
10     int i, j, ans = 0, n = strlen(ret);
11     for (i = 0; i < n; i++) {
12         for (j = 0; i >= j && i + j < n; j++) {
13             if (ret[i - j] != ret[i + j]) break;
14             ans = max(ans, j << 1 | 1);
15         }
16         for (j = 0; i >= j && i + j + 1 < n; j++) {
17             if (ret[i - j] != ret[i + j + 1]) break;
18             ans = max(ans, (j << 1) + 2);
19         }
20     }
21     printf("%d\n", ans);
22 }
23 int main() {
24 #ifdef LOCAL
25     freopen("in.txt", "r", stdin);
26     freopen("out.txt", "w+", stdout);
27 #endif
28     while (gets(ret)) solve();
29     return 0;
30 }

时间: 2024-10-11 22:39:53

九度oj 1528 最长回文子串的相关文章

leetcode oj s_05 最长回文子串

1 /** 2 * 最长回文子字符串 3 * 4 * @author 林夕 5 */ 6 public class Solution { 7 8 public static void main(String[] args) { 9 // String s = 10 // "rgczcpratwyqxaszbuwwcadruayhasynuxnakpmsyhxzlnxmdtsqqlmwnbxvmgvllafrpmlfuqpbhjddmhmbcgmlyeypkfpreddyencsdmgxysctp

九度oj 题目1528:最长回文子串

题目描述: 回文串就是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串. 回文子串,顾名思义,即字符串中满足回文性质的子串. 给出一个只由小写英文字符a,b,c...x,y,z组成的字符串,请输出其中最长的回文子串的长度. 输入: 输入包含多个测试用例,每组测试用例输入一行由小写英文字符a,b,c...x,y,z组成的字符串,字符串的长度不大于200000. 输出: 对于每组测试用例,输出一个整数,表示该组测试用例的字符串中所包含的的最长回文子串的长度. 样例输入:

求最长回文子串,O(n)复杂度

最长回文子串问题-Manacher算法 最长回文串问题是一个经典的算法题. 0. 问题定义 最长回文子串问题:给定一个字符串,求它的最长回文子串长度. 如果一个字符串正着读和反着读是一样的,那它就是回文串.下面是一些回文串的实例: 12321 a aba abba aaaa tattarrattat(牛津英语词典中最长的回文单词) 1. Brute-force解法 对于最长回文子串问题,最简单粗暴的办法是:找到字符串的所有子串,遍历每一个子串以验证它们是否为回文串.一个子串由子串的起点和终点确定

Manacher 算法讲解 O(N)复杂度的 最长回文子串求解

求解最长回文子串的方法很多,有几种常见的O(N^2)的最长回文子串求解方法,比如说枚举中心位置向两边扩展,动态规划等,大部分朋友应该都比较熟悉. Manacher算法相比于上面两种方法,时间复杂度是O(N),空间复杂度也是O(N),可以说是快速求解决回文子串的利器.下面介绍这一算法的思想,以及在文末给与它的实现. 我们以字符串 "ACBCABBB"为例(只考虑长度为奇数的回文串,待会会说明为何这么做),这里引入回文半径的概念,回文半径是指以该字符为中心的回文串的半径,比如ABA,B字符

[C++]LeetCode: 99 Longest Palindromic Substring (最长回文子串)

题目:Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 思路:题目要求的s的一个最长回文子串.暴力解决办法就是枚举所有的子串,再对每个子串进行回文判断.进行剪枝,我们考虑可以使用动态规划来避免重复的判

[译]最长回文子串(Longest Palindromic Substring) Part II

[译+改]最长回文子串(Longest Palindromic Substring) Part II 问题:给定字符串S,求S中的最长回文子串. 在上一篇,我们给出了4种算法,其中包括一个O(N2)时间O(1)空间的算法(中心检测法),已经很不错了.本篇将讨论一个O(N)时间O(N)空间的算法,即著名的Manacher算法,并详细说明其时间复杂度为何是O(N). 提示 +BIT祝威+悄悄在此留下版了个权的信息说: 先想想有什么办法能改进中心检测法. 考虑一下最坏的情况.★ 最坏的情况就是各个回文

URAL-1297 Palindrome (最长回文子串)

Palindrome Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Description The “U.S. Robots” HQ has just received a rather alarming anonymous letter. It states that the agent from the competing «Robots Unlimited» has infiltrat

最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和

参考:http://www.ahathinking.com/archives/124.html 最长公共子序列 1.动态规划解决过程 1)描述一个最长公共子序列 如果序列比较短,可以采用蛮力法枚举出X的所有子序列,然后检查是否是Y的子序列,并记录所发现的最长子序列.如果序列比较长,这种方法需要指数级时间,不切实际. LCS的最优子结构定理:设X={x1,x2,……,xm}和Y={y1,y2,……,yn}为两个序列,并设Z={z1.z2.……,zk}为X和Y的任意一个LCS,则: (1)如果xm=

[转]最长回文子串——4种解法

题记: 最近刚研究了动态规划,感觉确实是算法思想中比较晦涩深奥的一种,解法2就是用动态规划,一般都是用数组记录尝试过的解法结果,为后续的解法提供剪枝.对于这道题目,解法1,解法3的思路比较简单易懂. 解法1:用两个for循环找出所有子串,第三个for循环用于判断该子串是否为回文,是回文则且比已找到的回文串长就替换,算法时间效率为O(n^3) 解法3:用for循环遍历字符串的每一个字符,每找到一个字符就以此为中心,往两边拓展,看左右字符串是否相等.但是回文有两种类型,一种为奇数,一种偶数,如下: