字符串最长回文子串_最长回文子串

字符串最长回文子串

Problem statement:

问题陈述:

Given a string str, find the longest palindromic substring. A substring need to be consecutive such that for any xixj i<j must be valid in the parent string too. Like "incl" is a substring of "includehelp" while "iel" is not

给定字符串str ,找到最长回文子字符串。 子字符串必须是连续的,以便对于任何x i x j i <j在父字符串中也必须有效。 像“ incl”是“ includehelp”的子字符串,而“ iel”不是

Input:

输入:

The first line of input contains an integer T, denoting the no of test cases then T test cases follow. Each test case contains a tring str.

输入的第一行包含一个整数T ,表示测试用例的数量,然后是T个测试用例。 每个测试用例都包含一个tring str

Output:

输出:

For each test case output will be a string which is the longest palindromic substring could be formed from the string str. There can be many valid answers, all are correct.

对于每个测试用例,输出将是一个字符串,该字符串是可以从字符串str形成的最长回文子字符串。 可能有许多有效答案,所有答案都是正确的。

Constraints:

限制条件:

1 <= T <= 100
1 <= length of string str <= 300

Example:

例:

Input:
test case:2
First test case:
Input string:
"aaaa"
Output:
Longest palindromic substring is: "aaaa"
Second test case:
Input string:
"abcaba"
Output:
Total count of palindromic sub-sequence is: "aba"

Explanation:

说明:

Test case 1: Input: "aaaa"

测试案例1:输入:“ aaaa”

The valid palindromic substrings are shown below:

有效回文子串如下所示:

Marked cells are character taken in subsequence:

标记的单元格是子序列中的字符:

longest palindromic substring (1)
longest palindromic substring (2)

So the longest one is "aaaa"

所以最长的是“ aaaa”

For the second test case,

对于第二个测试用例,

The substrings can be,
"a"
"b"
"c"
"aba"
So the longest one is "aba"

Solution approach

解决方法

This can be solved by using DP top-down approach,

这可以通过使用DP自上而下的方法来解决,

  1. Initialize a Boolean 2D array dp[n][n] to store whether the substrings are palindrome or not.

    初始化布尔2D数组dp [n] [n],以存储子字符串是否为回文。

  2. Initialize max to store max length of substring and p to store the substring itself.

    初始化max来存储子字符串的最大长度,并初始化p来存储子字符串本身。

    Initially,

    原来,

    p is the first character as that's the smallest palindrome of length 1 and max = 1.

    p是第一个字符,因为它是长度为 1且max = 1的最小回文。

  3. Fill up the base case,

    填满基本情况

    Base case is that each single character is a palindrome itself. And for length of two, i.e, if adjacent characters are found to be equal then

    基本情况是,每个字符本身都是回文。 对于两个字符的长度,即如果发现相邻字符相等,则

    dp[i][i+1]=true, else if characters are different then dp[i][i+1]=false

    dp [i] [i + 1] = true ,否则如果字符不同则dp [i] [i + 1] = false

    To understand this lets think of a string like "acaa"

    要理解这一点,可以考虑一个字符串,例如“ acaa”

    Here

    这里

    dp[0][1]=false

    dp [0] [1] = false

    Whereas for

    鉴于

    dp[2][3] =true

    dp [2] [3] = true

    for i=0 to n
    // for single length characters
    dp[i][i]=true 
    if(i==n-1)
    break;        
    if(s[i]==s[i+1])
    dp[i][i+1]=true
    else
    dp[i][i+1]=false;
    end for
    
    
  4. Compute for higher lengths,

    计算更长的长度,

    for len=3 to n
    for start=0 to n-len
    int end=start+len-1;
    // start and end is matching and rest of 
    // substring is already palindrome
    if(s[end]==s[start]   && dp[start+1][end-1])
    dp[start][end]=true;
    Update max=len;
    Update p=s.substr(start,len);
    else
    dp[start][end]=false;
    end if
    end for
    end for
    
    
  5. Final result is stored in p;

    最终结果存储在p中

So for higher lengths, if starting and ending index is the same then we recur for the remaining characters since we have the sub-problem result stored so we computed that. That's why we just update max to len as we are checking for increasing length at each iteration.

因此,对于更大的长度,如果开始索引和结束索引相同,则将重复其余字符,因为我们已存储了子问题结果,因此我们对其进行了计算。 这就是为什么我们在每次迭代中检查长度增加时仅将max更新为len的原因。

For proper understanding, you can compute the table by hand for the string "abcaba" to understand how it's working.

为了正确理解,您可以手动计算字符串“ abcaba”的表以了解其工作方式。

C++ Implementation:

C ++实现:

#include <bits/stdc++.h>
using namespace std;
string longestPalindrome(string s)
{
int n = s.length();
if (n == 0)
return "";
if (n == 1)
return s;
bool dp[n][n];
string p = string(1, s[0]);
int max = 1;
for (int i = 0; i < n; i++) {
dp[i][i] = true;
if (i < n - 1 && s[i] == s[i + 1]) {
dp[i][i + 1] = true;
if (2 > max) {
p = s.substr(i, 2);
max = 2;
}
}
else if (i < n - 1) {
dp[i][i + 1] = false;
}
}
for (int len = 3; len <= n; len++) {
for (int j = 0; j <= n - len; j++) {
int end = j + len - 1;
if (s[j] == s[end]) {
dp[j][end] = dp[j + 1][end - 1];
if (dp[j][end] && len > max) {
max = len;
p = s.substr(j, len);
}
}
else
dp[j][end] = false;
}
}
return p;
}
int main()
{
int t;
cout << "Enter number of testcases\n";
cin >> t;
while (t--) {
string str;
cout << "Enter the string\n";
cin >> str;
cout << "Longest palindromic substring: " << longestPalindrome(str) << endl;
}
return 0;
}

Output:

输出:

Enter number of testcases
2
Enter the string
anccnakj
Longest palindromic substring: anccna
Enter the string
abcaba
Longest palindromic substring: aba

翻译自: https://www.includehelp.com/icp/longest-palindromic-substring.aspx

字符串最长回文子串

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/380697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个人在办公室的日子

同我一起工作的那个大学同学兼同事ALICE因为个人原因,最近请假了一个星期.剩下了孤单的我在公司应付日常英文翻译书写工作。的确有点闷&#xff0c;的确有些不习惯&#xff0c;点讲&#xff0c;习惯了两个人一起吃饭聊天&#xff0c;一起拼命赶稿子&#xff0c;一起饭后散步&am…

php的array_merge函数

array_merge函数用于把一个或多个数组合并为一个数组 语法&#xff1a; array_merge(array1,array2,array3...)<?phpheader(content-type:text/html;charsetutf-8);$a1array("a">"red","b">"green");$a2array("c"…

dlf packet_DLF的完整形式是什么?

dlf packetDLF&#xff1a;德里土地和金融 (DLF: Delhi Land and Finance) DLF is an abbreviation of Delhi Land and Finance. Delhi Land and Finance is one of the leading commercial real estate developers in India. In 1946, the company was established by Chaudha…

python求三个数中最小(大)的元素

求最小&#xff1a; def getThreeNumberMin(x,y,z):minx if x<y else yminmin if min<z else zreturn min agetThreeNumberMin(3,-1,-1) print(a)结果&#xff1a; 求最大&#xff1a; def getThreeNumberMin(x,y,z):maxx if x>y else ymaxmax if max>z else zr…

java内存分配空间大小,JVM内存模型及内存分配过程

一、JVM内存模型JVM主要管理两种类型内存&#xff1a;堆(Heap)和非堆(Permanent区域)。1、Heap是运行时数据区域&#xff0c;所有类实例和数组的内存均从此处分配。Heap区分两大块&#xff0c;一块是 Young Generation&#xff0c;另一块是Old Generation&#xff1a;1)在Young…

python自动翻译pdf_在Python中自动执行PDF

python自动翻译pdfModules used: 使用的模块&#xff1a; In this script, we will use PyPDF2 module which will provide us various functions such as to extract the data and read the pdf file and split the file and write a new file. 在此脚本中&#xff0c;我们将…

设置DVWA出现Could not connect to the MySQL service. Please check the config的解决方法,默认登录账号

按照这个路径&#xff0c;找到config.inc.php文件&#xff0c;打开 找到下面三个语句 db_server:一般填127.0.0.1&#xff0c;如果修改了mysql的端口号&#xff0c;要在后面加上修改后的端口号&#xff0c;默认为3306 db_user:自己mysql数据库的用户名 db_password&#xff1…

关于用户角色权限的一点想法(1) 选择自 biggie 的 Blog

原文&#xff08;http://dev.csdn.net/article/19/19751.shtm&#xff09; 前言&#xff1a;权限往往是一个极其复杂的问题&#xff0c;但也可简单表述为这样的逻辑表达式&#xff1a;判断“Who对What(Which)进行How的操作”的逻辑表达式是否为真。针对不同的应用&#xff0c;需…

使用anconada 的conda更换环境

打开命令行界面。cmd&#xff0c;直接打开 查看有些环境 conda env list 我这里有两个环境使用指定的环境 我这里就用py27 命令&#xff1a;activate环境名 py27在前面&#xff0c;已经成功更换了退出使用某个环境 conda deactivate 前面已经没有py27&#xff0c;表示已经退…

php采集分页数据,如何通过php+wordpress实现分页获取数据

1.首先我们通过WordPress来搭建我们的博客网站&#xff0c;需要实现分页获取数据&#xff0c;我们需要了解一下WordPress给我们提供的api。主要是get_posts()这个api的使用方法。函数的结构大概长这么个样子&#xff1a;<?php get_posts($args); ?> &#xff0c;其中…

家纺B2C优雅100获IDG及DCM 1000万美元投资

网易科技讯 3月3日下午动静&#xff0c;家纺网上商城优雅100(uya100.com) 首创人陈腾华往日吐露&#xff0c;该公司明天不日完成了1000万美元的首轮融资&#xff0c;投资方为IDG及DCM。陈腾华以有合同约定为由拒绝流露更详细的财务细节。陈腾华说&#xff0c;这1000万美元曾经到…

手动打开和关闭windows的相关服务

winR&#xff0c;输入services.msc 找到指定的服务打开或者关闭

PetShop之ASP.NET缓存(转载)

《解剖PetShop》系列之四 四 PetShop之ASP.NET缓存 如果对微型计算机硬件系统有足够的了解&#xff0c;那么我们对于Cache这个名词一定是耳熟能详的。在CPU以及主板的芯片中&#xff0c;都引入了这种名为高速缓冲存 储器&#xff08;Cache&#xff09;的技术。因为Cache的存取速…

使用python学线性代数_最简单的神经网络简介| 使用Python的线性代数

使用python学线性代数A neural network is a powerful tool often utilized in Machine Learning because neural networks are fundamentally very mathematical. We will use our basics of Linear Algebra and NumPy to understand the foundation of Machine Learning usin…

电脑安装了mysql,但找不到mysql服务

首先找到mysql的bin文件目录&#xff0c;我的是在&#xff1a;C:\Program Files\mysql-5.7.27-winx64\bin 然后找到下图内容&#xff0c;右键以管理者身份运行 然后cd 到mysql的bin目录 在输入mysqld -install 服务就重启好了

win10安装masm32 SDK并运行一个小程序

建议在安装之前&#xff0c;先装一下notepad编辑器&#xff08;其他也行)&#xff0c;Visual C 首先我们到官网下载masm32&#xff08;http://www.masm32.com/&#xff09;&#xff0c;到了官网后&#xff0c;点击download就行了。 随便点一个就可以了。 将zip文件解压&#…

matlab figure 嵌套,操作Matlab的Figure窗口(一)

以前&#xff0c;我和很多人一样&#xff0c;总是将数据保存到mat文件中。后来突然发现&#xff0c;如果数据量不大的话&#xff0c;直接将Figure窗口中的图形保存为fig文件是更好的选择。fig文件与一般的图像文件不同&#xff0c;并不是由图像的像素构成&#xff0c;它包含了当…

c语言中fflush函数z_带有示例的C语言fflush()函数

c语言中fflush函数zC中的fflush()函数 (fflush() function in C) Prototype: 原型&#xff1a; int fflush(FILE *filename);Parameters: 参数&#xff1a; FILE *filenameReturn type: 0 or EOF 返回类型&#xff1a; 0或EOF Use of function: 使用功能&#xff1a; When …

masm32使用nmake工具

nmake.exe如果你安装了Visual C你可以在bin文件目录下找到&#xff0c;然后复制到masm32的bin目录下,如果没有安装visual C就百度下一个吧&#xff01; 使nmake之前&#xff0c;我们的.obj和.res文件都创建好了,在工程建一个文件Makefile&#xff0c;不需要后缀 里面内容填&am…

SQL Server 2005 中的商务智能和数据仓库

SQL Server 2005 中的商务智能和数据仓库 发布日期&#xff1a; 2005年03月11日摘要&#xff1a;本文概述了 SQL Server 2005 Beta 2 中“商务智能”平台的增强功能。本文并非实施指南&#xff0c;而是为读者提供了关于“商务智能”平台增强功能的信息。本页内容 简介SQL Serve…