【PAT甲级真题】- Longest Symmetric String (25)

题目来源

Longest Symmetric String (25)

题目描述

Given a string, you are supposed to output the length of the longest

symmetric sub-string. For example, given "Is PAT&TAP

symmetric?", the longest symmetric sub-string is "s

PAT&TAP s", hence you must output 11.

输入描述:

Each input file contains one test case which gives a non-empty string of length no more than 1000.

输出描述:

For each test case, simply print the maximum length in a line.

输入例子:

Is PAT&TAP symmetric?

输出例子:

11

思路简介

最长回文有两种写法

  • 中心扩展法:最常用也是最简单好理解的方法,O(n^2)
  • Manacher算法:可以 O(n) 求出所有位置的最长回文串,一般用于多组询问,实际工程上效率可能不如中心扩展

我只简单介绍中心扩展法:

顾名思义,就是从当前位置向两边扩展

用左右指针维护,相同就左指针左移,右指针右移继续比较,不同就退出取最大值

注意

  • 回文有奇回文和偶回文之分,我这里用一个函数就可以区别,可以参考一下代码
  • 指针不能越界

遇到的问题

  1. 没分奇偶回文wa了一次

代码

cpp 复制代码
/**
 * https://www.nowcoder.com/pat/5/problem/4027
 * 最长回文
 */
#include<bits/stdc++.h>
using namespace std;

int expand(string s,int l,int r){
    int len=s.size(),mx=0;
    while(l>=0&&r<len&&s[l]==s[r])l--,r++;
    
    return r-l-1;
}

void solve(){
    string s;
    getline(cin,s);
    int len=s.size(),mx=0;
    for(int i=0;i<len;++i){
        mx=max(expand(s,i,i),mx);//奇回文
        mx=max(expand(s,i,i+1),mx);//偶回文
    }
    cout<<mx;
}

int main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    //fstream in("in.txt",ios::in);cin.rdbuf(in.rdbuf());
    int T=1;
    //cin>>T;
    while(T--){
        solve();
    }
    return 0;
}
相关推荐
码完就睡12 分钟前
数据结构——红黑树
数据结构
码爸20 分钟前
数据结构详细介绍
数据结构
Navigator_Z31 分钟前
LeetCode //C - 1286. Iterator for Combination
c语言·算法·leetcode
北极有牛1 小时前
cpp学习笔记--常量指针
java·开发语言·算法
GPU实战笔记1 小时前
云端 GPU 训练的账户余额提醒:它能说明什么,不能说明什么?
深度学习·算法·成本管理·gpu云计算·云端训练
半杯咖啡半行码1 小时前
C++ 编程与 STL 模板:从泛型编程到内存安全详解
开发语言·c++
浮链序1 小时前
怎么证明"你这个模型是偷我的"——把蒸馏变成取证工具
算法·安全·llm
小O的算法实验室1 小时前
IEEE TMC,面向异构物联网的多目标量子行为拓扑优化算法
算法
liliangcsdn2 小时前
派息率指标的应用探索和分析
大数据·算法
xh didida2 小时前
Linux -- 基础IO
linux·服务器·开发语言·c++