找出字符串中的最长的回文子串

 1 class Solution {
 2 public:
 3     string longestPalindrome(string s) {
 4         int maxLoc=0;
 5         int maxNum=1;
 6         const int stringSize=s.size();
 7         if(stringSize==1){
 8             return s;
 9         }
10
11         for(int i=1; i!= 2*stringSize-1-1;++i){
12             int a, b;
13             int num=1;
14             if(i%2==0){     //even
15                 a=(int)(i-1)/2;
16                 b=(int)(i+1)/2+1;
17                 num=1;
18             }
19             else{   //old
20                 a=(int)(i-1)/2;
21                 b=(int)(i+1)/2;
22                 num=0;
23             }
24
25             while(a>=0 && b<=stringSize){
26                 if(s[a] == s[b]){
27                     num=num+2;
28                     a--;
29                     b++;
30                 }
31                 else{
32                     break;
33                 }
34             }
35             if(num>maxNum){
36                 maxNum=num;
37                 maxLoc=i;
38             }
39         }
40
41         if(maxLoc%2==0){
42            return s.substr(maxLoc/2-(maxNum-1)/2, maxNum);
43         }
44         else{
45             return s.substr(maxLoc/2+1-maxNum/2, maxNum);
46         }
47     }
48 };
时间: 2024-10-27 05:43:40

找出字符串中的最长的回文子串的相关文章

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

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

c语言代码编程题汇总:找出字符串中与输入的字母元素相同的个数以及其所对应数组的下标值

找出字符串中与输入的字母元素相同的个数以及其所对应数组的下标值 程序代码如下: 1 /* 2 2017年3月8日08:39:16 3 功能:找出字符串中与输入的字母元素相同的个数以及其所对应数组的下标值 4 */ 5 6 #include"stdio.h" 7 int main (void) 8 { 9 int i = 0, j = 0; 10 char a[100]; 11 char ch; 12 int num = 0; 13 14 printf ("please inp

找出字符串中出现次数最多的字符,和最大次数

/*找出字符串中出现次数最多的字符,和最大次数*/ function countMax(str){ var max = 0; // 记录出现的最大次数 var maxChar = ""; // 记录出现最多次数的字符 var counts = new Array(127); // 记录中间计算结果 for(var i = 0; i < counts.length; i++){ counts[i] = 0; } for(var i = 0; i < str.length; i

找出字符串中第一个不重复的字符(JavaScript实现)

如题~ 此算法仅供参考,小菜基本不懂高深的算法,只能用最朴实的思想去表达. 1 //找出字符串中第一个不重复的字符 2 // firstUniqueChar("vdctdvc"); --> t 3 function firstUniqueChar(str){ 4 var str = str || "", 5 i = 0, 6 k = "", 7 _char = "", 8 charMap = {}, 9 result =

华为OJ:找出字符串中第一个只出现一次的字符

可以稍微让代码写的好看,不用直接写双循环的话,就可以写成函数的调用,重用性也很高. import java.util.Scanner; public class findOnlyOnceChar { public static boolean FindChar(String pInputString, char pChar){ int count=0; for(int i=0;i<pInputString.length();i++){ if(pInputString.charAt(i)==pCh

找出字符串中第一个出现次数最多的字符

找出字符串中第一个出现次数最多的字符 详细描述: 接口说明 原型: bool FindChar(char* pInputString, char* pChar); 输入参数: char* pInputString:字符串 输出参数(指针指向的内存区域保证有效): char* pChar:出现次数最多的字符 返回值: false 异常失败 true  输出成功 #include <iostream> #include <string.h> using namespace std; b

manacher算法处理最长的回文子串(一)

引言 相信大家都玩过折叠纸张,如果把回文串相当于折叠一个A4纸,比如ABCDDCBA就是沿着中轴线(D与D之间)对折重合,那么这个就是一个回文串.或者是ABCDEDCBA的中轴线就是E,那么沿着中轴线对折也是重合的,所以这个字符串也是一个回文串. 判断一个字符串中的最长回文子串,我们可以对每个字符的两边进行比较,还是如何ABCDEDCBA,在A,B,C,D分别为中心轴向两边扩展的回文子串长度都是1,就是它自己本身,当扫描以E为中心轴时,那么这个回文的最长子串时9,也就是这个字符串本身.然而当用相

manacher算法处理最长的回文子串(二)

在上篇<manacher算法处理最长的回文子串(一)>解释了manacher算法的原理,接着给该算法,该程序在leetcode的最长回文子串中通过.首先manacher算法维护3个变量.一个名为radius[i]的数组,表示以i为中心轴承的回文子串的半径,如abcdcba中,字符d的下标为4,则他的radius[4]=3,下标的为0的a的半径为radius[0]=0,即中心轴不考虑其中.一个idx表示上一次以idx为中心轴的回文.如果当以i为中心的回文在以idx为中心的回文内.则idx不更新,

[Python3 练习] 010 找出字符串中特定的字符

题目:找出藏在字符串中的"密码" (1) 描述 1) 题源1 鱼 C 论坛中"小甲鱼"老师出的题 链接地址:第020讲:函数:内嵌函数和闭包 | 课后测试题及答案 2) 题源2 这几日挺巧的 在鱼 C 论坛上找 Python 习题,点开第 20 节,看到两道操作题 又想起一个网站 Python Challenge ,久闻其名,未曾拜访,遂一探究竟 原来小甲鱼老师第 20 节的两道操作题改编自 Python Challenge 的 level2 与 level 3 2