1. 程式人生 > >hihocoder #1032 : 最長迴文子串

hihocoder #1032 : 最長迴文子串

時間限制:1000ms 單點時限:1000ms 記憶體限制:64MB

描述

   小Hi和小Ho是一對好朋友,出生在資訊化社會的他們對程式設計產生了莫大的興趣,他們約定好互相幫助,在程式設計的學習道路上一同前進。

   這一天,他們遇到了一連串的字串,於是小Hi就向小Ho提出了那個經典的問題:“小Ho,你能不能分別在這些字串中找到它們每一個的最長迴文子串呢?”

   小Ho奇怪的問道:“什麼叫做最長迴文子串呢?”

   小Hi回答道:“一個字串中連續的一段就是這個字串的子串,而回文串指的是12421這種從前往後讀和從後往前讀一模一樣的字串,所以最長迴文子串的意思就是這個字串中最長的身為迴文串的子串啦~”

   小Ho道:“原來如此!那麼我該怎麼得到這些字串呢?我又應該怎麼告訴你我所計算出的最長迴文子串呢?

   小Hi笑著說道:“這個很容易啦,你只需要寫一個程式,先從標準輸入讀取一個整數N(N<=30),代表我給你的字串的個數,然後接下來的就是我要給你的那N個字串(字串長度<=10^6)啦。而你要告訴我你的答案的話,只要將你計算出的最長迴文子串的長度按照我給你的順序依次輸出到標準輸出就可以了!你看這就是一個例子。”

樣例輸入
3
abababa
aaaabaa
acacdas
樣例輸出
7
5
3


#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<set>
#include <queue>
#include<algorithm>
const double PI = acos(-1.0);
using namespace std;
char str[1000005];
int main()
{
	str[0] = '$';
	int n;
	cin>>n;
	while(n --)
	{
		scanf("%s", str + 1);
		int ans = 0;
		for(int i = 1; str[i]; ++ i)
		{
			int l = i, r = i;
			while(str[r + 1] == str[i])
				++r;
			i = r;
			while(str[l - 1] == str[r + 1])
				--l, ++r;
			ans = max(ans, r - l + 1);
		}
		cout<<ans<<endl;
	}
	
}

 

相關推薦

hihocoder #1032 :

時間限制:1000ms 單點時限:1000ms 記憶體限制:64MB 描述    小Hi和小Ho是一對好朋友,出生在資訊化社會的他們對程式設計產生了莫大的興趣,他們約定好互相幫助,在程式設計的

51nod-【hihocoder #1032 :

<span style="font-size:18px;"> </span><span style="font-size:18px;">include<cst

hihocoder 1032 (Manacher演算法 詳解+模板)

時間限制:1000ms 單點時限:1000ms 記憶體限制:64MB 描述    小Hi和小Ho是一對好朋友,出生在資訊化社會的他們對程式設計產生了莫大的興趣,他們約定好互相幫助,在程式設計的

hdu3068 hihocoder 1032 馬拉車演算法

#include<bits/stdc++.h> using namespace std; const int maxn=1e6+10; char s1[maxn],s2[2*maxn];int p[2*maxn]; void gets2() { int len=

hiho一下第一週#1032 :

一個字串中連續的一段就是這個字串的子串,而回文串指的是12421這種從前往後讀和從後往前讀一模一樣的字串,所以最長迴文子串的意思就是這個字串中最長的身為迴文串的子串 思路1 以字串中的每個字元為中心,向左右兩邊尋找,直到找到最長的迴文子串

HiHo #1032 : 【Manacher演算法】

#1032 : 最長迴文子串 時間限制:1000ms 單點時限:1000ms 記憶體限制:64MB 描述    小Hi和小Ho是一對好朋友,出生在資訊化社會的他們對程式設計產生了莫

HiHo 1032 (Manacher演算法求解)

Manacher演算法o(n)求解最長迴文子串問題 非常巧妙 #include<bits/stdc++.h> using namespace std; char str[2000020],s[2000020]; int p[2000020]; int len,

leetcode5:Longest Palindromic Substring

python版: class Solution: def longestPalindrome(self, s): """ :type s: str :rtype: str """ start = en

【HDU - 3068】(Manacher演算法,馬拉車演算法求

題幹: 給出一個只由小寫英文字元a,b,c...y,z組成的字串S,求S中最長迴文串的長度.  迴文就是正反讀都是一樣的字串,如aba, abba等 Input 輸入有多組case,不超過120組,每組輸入為一行小寫英文字元a,b,c...y,z組成的字串S  兩

DP

給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為1000。 示例 1: 輸入: "babad" 輸出: "bab" 注意: "aba"也是一個有效答案。 示例 2: 輸入: "cbbd" 輸出: "bb" 分析:dp    dp[ j ][ i

【探索-中級演算法】

這一題可以參考:647. 迴文子串 本質上是一樣的,要判斷出所有的迴文字串,然後找到其中最長的那一個。 中心擴充套件法 中心擴充套件就是把給定的字串的每一個字母當做中心,向兩邊擴充套件,這樣來找最長的子迴文串。演算法複雜度為O(N^2) public Stri

LeetCode5

這兩天被這個題弄得是有些崩潰了,因為之前試的兩種方法都是超時了,所以弄得後面都有些不想弄了。還好有度娘,最後用的是從中間往兩邊擴充套件的方法得此解決,真的是如釋重負啊!廢話不說,講正文貼程式碼。 題目如下: 給定一個字串 s,找到 s 中最長的迴文子串。你可以假

(Longest Palindromic Substring)

題目描述: 給出一個字串(假設長度最長為1000),求出它的最長迴文子串,你可以假定只有一個滿足條件的最長迴文串。 樣例 給出字串 "abcdzdcab",它的最長迴文子串為 "cdzdc"。 挑戰 O(n2) 時間複雜度的演算法是可以接受的,如果你

演算法學習——尋找字串中的

文章轉載自公眾號《網際網路偵查》 /** * @author xiaoshi on 2018/9/24. * Happy Mid-Autumn Festival */ public class PlalindromeString { // 判斷一個字串是否迴文,演算法中用

LeetCode 5(java程式碼)

方法一:動態規劃       定義P(i,j):如果字串從i位置到j位置是迴文,P(i,j)=true;否則,P(i,j)=false;      那麼P(i,j)= P(i+1,j−1) && Si==Sj &

大連續序列和/不下降序列/公共序列/

//最大連續子序列和 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 10010; int A[maxn],dp[maxn]; int main(){ int

--演算法思想探討和實現(python java)

最長迴文子串–演算法思想探討和實現(python java) 迴文串定義: 如果一個字串正著讀和反著讀是一樣的,那它就是迴文串。 下面是一些迴文串的例項: 12321 a aba abba aaaa tattarrattat 問題定義 最長迴

leetcode5:

1 題目 給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為1000。 示例 1: 輸入: “babad” 輸出: “bab” 注意: "aba"也是一個有效答案。 示例 2: 輸入: “cbbd” 輸出: “bb” 題目連結: https

leetcode演算法題—golang—(題5)

題目:最長迴文子串 給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為1000。 示例 1: 輸入: "babad" 輸出: "bab" 注意: "aba"也是一個有效答案。 示例 2: 輸入: "cbb

LetCode: 5.

提示 LintCode中的相關演算法題實現程式碼,可以在我的GithHub中下載。 題目需求 給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為1000。 示例 1: 輸入: "babad" 輸出: "ba