给一个字符串,找到其最长的回文字串

直接上代码:

 1 string expendCentral(string, int);
 2
 3 string longestPalindrome(string s)
 4 {
 5     int len = s.size();
 6     if (len == 0)
 7         return "";
 8     string maxStr = s.substr(0, 1);
 9     for (int i = 0; i < len - 1; i++) {
10         string expendStr = expendCentral(s, i);
11         if (expendStr.size() > maxStr.size())
12             maxStr = expendStr;
13     }
14     return maxStr;
15 }
16
17 string expendCentral(string s, int d)
18 {
19     int l1 = d;
20     int r1 = d;
21     while (l1 - 1 >= 0 && r1 + 1 < s.size()) {
22         if (s[l1-1] == s[r1+1]) {
23             l1--;
24             r1++;
25         }
26     }
27     int len1 = r1 - l1 + 1;
28     int len2 = 0;
29     int l2 = d;
30     int r2 = d + 1;
31     if (s[d] == s[d+1]) {
32         while (l2 - 1 >= 0 && r2 + 1 < s.size()) {
33             if (s[l2-1] == s[r2+1]) {
34                 l2--;
35                 r2++;
36             }
37         }
38         len2 = r2 - l2 + 1;
39     }
40     if (len1 > len2)
41         return s.substr(l1, r1-l1+1);
42     else
43         return s.substr(l2, r2-l2+1);
44 }        
时间: 2024-12-19 19:25:32

给一个字符串,找到其最长的回文字串的相关文章

字符串运用-密码截取,字符串中的最长的回文串

Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解.比如进行下列变化 ABBA->12ABBA,ABA->ABAKK,123321->51233214 .因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba,或baaab的加密形式),Cathcer的工作量实在是太大了,他只能向电脑高手求助,你能帮Catcher找出最长的有效密码串吗? 1

LeetCode OJ: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. 玩了两天dota2,罪过罪过,还是应该老老实实刷题啊. 题目求得是最长的回文子串,这里使用的是暴力的解法,也就是解决两种回文"asdsa"以

求一个字符串中的最长回文串(Java)

package huiwenchuan; import java.util.Scanner; public class Main { //判断一个字符串是否为回文串 public static boolean isHuiWen(String s) { int len=s.length(); for(int i=0;i<len/2;i++) { if(!(s.charAt(i)==s.charAt(len-i-1))) { return false; } } return true; } /**

最长(大)回文串的查找(字符串中找出最长的回文串)PHP实现

首先还是先解释一下什么是回文串:就是从左到右或者从右到左读,都是同样的字符串.比如:上海自来水来自海上,bob等等. 那么什么又是找出最长回文串呢? 例如:字符串abcdefedcfggggggfc,其中efe,defed,cdefedc,gg,ggg,gggg,ggggg,gggggg,fggggggf,cfggggggfc都是回文串,左右完全一样. 这其中,有最短的gg,最长的cfggggggfc,还有其他长度的.忽略长度为1的.毕竟一个字符的都算回文了. 那么,找出最长的,就是找出这个cf

最长回文字串 (The longest palindrome substring)

这两天去学了一下,觉得下面那篇文章写的很好,有例子,比较容易懂,所以转一下. 以下内容来自:hihoCoder: 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一连串的字符串,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能分别在这些字符串中找到它们每一个的最长回文子串呢?” 小Ho奇怪的问道:“什么叫做最长回文子串呢?” 小Hi回答道:“一个字符串中连续的一段就是这个字符串的子串,而回文

Hdu 3068 最长回文字串Manacher算法

题目链接 最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7976    Accepted Submission(s): 2735 Problem Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.回文就是正反读都是一样的字符串,如aba, abba等 Input 输入

bzoj 2565: 最长双回文串

Description 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为"abc",逆序为"cba",不相同).输入长度为n的串S,求S的最长双回文子串T,即可将T分为两部分X,Y,(|X|,|Y|≥1)且X和Y都是回文串. Input 一行由小写英文字母组成的字符串S. Output 一行一个整数,表示最长双回文子串的长度. Sample Input baacaabbacabb Sample Output 12 HINT

BZOJ2565:最长双回文串

2565: 最长双回文串 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2195  Solved: 1119[Submit][Status][Discuss] Description 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为"abc",逆序为"cba",不相同). 输入长度为n的串S,求S的最长双回文子串T,即可将T分为两部分X,Y,(|X|,|Y|≥1)且X和Y都

最长回文字串理解(学习Manacher&#39;s algorithm)

关于字符串的子串问题,我们经常需要利用的是已经访问的部分的信息,来降低复杂度,和提高效率:在求最长回文子串的问题中,Manacher's algorithm提供了一种很好的机制,虽然部分地方不太容易理解 先说下核心的思想:先对原字符串进行预处理,将字符串"abc"转换为"$#a#b#c#"的形式,既避免了访问越界的问题,又保证每一个字符有至少一个对称的串(真字符,或是假的“#”) 预留两对变量(当前得到的中心位置“center”,和字符串右侧最远位置“R”,以及对称