IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++pta A1040(回文子串) -> 正文阅读

[C++知识库]c++pta A1040(回文子串)

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.

给定你一个序列,要求你输出最长的回文子序列,比如PAT&TAP symmetric?, 回文,最长的子串s PAT&TAP s,因此你必须输出11

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

输出规格:,每个输入文件包含一个测试样例,给定一个非空不超过1000的字符串。

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

对于每个样例,仅仅打印最大的长度在一行里。

Sample Input:

Is PAT&TAP symmetric?

Sample Output:

11

核心思路

确定好对称轴。进行转字符串。

完整代码

#include<iostream>
using namespace std;
int main()
{
    int i,j,k,maxlength = 0;
    string s;
    getline(cin,s);

    for(i = 0;i<s.size();i++){
        for(j =i,k=i;j>=0&&k<s.size()&&s[j]==s[k];j--,k++);
        if(k-j-1>maxlength) maxlength = k-j-1;
    }

    for(i = 0;i+1<s.size();i++){
        for(j=i,k=i+1;j>=0&&k<s.size()&&s[j]==s[k];j--,k++);
        if(k-j-1>maxlength) maxlength = k- j- 1;
    }
    cout << maxlength;
}

方法2

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn = 1010;
string s;
int dp[maxn][maxn];
int main(){
    getline(cin,s);
    int len = s.length(),ans =1;
    memset(dp,0,sizeof(dp)); //dp数组初始化为0
    //边界
    for(int i =0;i<len;i++){
        dp[i][i] = 1;
        if(i < len-1){
            if(s[i] == s[i+1]){
                dp[i][i+1] = 1;
                ans = 2; //初始化的注意当前最长回文子串的长度
            }
        }
    }
    //状态转移方程
    for(int L= 3;L<=len;L++){//枚举子串的长度
        for(int i = 0;i+L-1<len;i++){//枚举子串的起始断点
            int j = i+L-1; //子串的右端点
            if(s[i] == s[j] && dp[i+1][j-1] ==1){
                dp[i][j] = 1;
                ans = L;//更新最长的回文子串长度
            }
        }
    }
    printf("%d\n",ans);
    return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-01 20:25:11  更:2022-02-01 20:26:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:32:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码