最长对称子串 (最长回文字串) pta 7-12

题目链接https://pintia.cn/problem-sets/1218774283169423360/problems/1218774532776648715

方法一, 见代码

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include<cmath>
#include<vector>
using namespace std;
typedef long long ll;

string a;
int m = 0;
int solve1(int l, int r)
{
    while (l >= 0 && r < a.size() && a[l] == a[r])
    {
        l--;r++;
    }
    return r - 1 - (l + 1) + 1;
}
int solve2(int l, int r)
{
    while (l >= 0 && r < a.size() && a[l] == a[r])
    {
        l--;r++;
    }
    return r - 1 - (l + 1) + 1;
}
int main()
{
    getline(cin, a);
    for (int i = 0; i < a.size(); i++)
    {
        m = max(solve1(i,i), m);
        m = max(solve2(i,i + 1), m);
    }
    cout << m << endl;
}

方法二 马拉车算法

原文地址:https://www.cnblogs.com/hulian425/p/12239101.html

时间: 2024-10-11 04:25:37

最长对称子串 (最长回文字串) pta 7-12的相关文章

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

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

L2-008. 最长对称子串

L2-008. 最长对称子串 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&TAP s",于是你应该输出11. 输入格式: 输入在一行中给出长度不超过1000的非空字符串. 输出格式: 在一行中输出最长对称子串的长度. 输入样例: Is PAT

天梯杯 L2-008. 最长对称子串(马拉车算法应用)

最长对称子串 对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11. 输入格式: 输入在一行中给出长度不超过1000的非空字符串. 输出格式: 在一行中输出最长对称子串的长度. 马拉车算法: 一)第一步是改造字符串S,变为T,其改造的方法如下: 在字符串S的字符之间和S的首尾都插入一个"#",如:S="abba"变为T="#a#b#b

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

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

L2-008 最长对称子串 (25 分) (模拟)

链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805067704549376 题目: 对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11. 输入格式: 输入在一行中给出长度不超过1000的非空字符串. 输出格式: 在一行中输出最长对称子串的长度. 输入样例: Is PAT&TAP symme

L2-008 最长对称子串 (25分)

对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11. 输入格式: 输入在一行中给出长度不超过1000的非空字符串. 输出格式: 在一行中输出最长对称子串的长度. 输入样例: Is PAT&TAP symmetric? 输出样例: 11 思路:本题可以有多种方法来解决,动态规划,马拉车等等,但是我更擅长动态规划来解决此题,本题定义一个动态规划数组dp[i][j],表示的意义为

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

参考: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=

PAT L2-008. 最长对称子串

题目链接:PAT L2-008. 最长对称子串 题意: 对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&TAP s",于是你应该输出11. 题解: 直接枚举中点,暴力一下 1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int i=a;i<=b;++i) 3 using namespace std

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 输入

PTA——最长对称子串

PTA 7-64 最长对称子串 1 //流程: 2 //数组存储字符串,指针i从头遍历 3 //str[i-2]==str[i],若相等则记录对称串的长度,同时指针j从i-2开始向后遍历 4 //两个指针所指内容不相等时停止遍历,更新对称串的长度 5 //奇数情况// 6 //变量: 7 //字符数组str 8 //指针i.j 9 //状态变量sys——当前对称串是否在增长 10 //temp——当前对称串长度 11 // lng——当前最长对称串长度 12 //细节: 13 //i从2开始遍历