使用动态规划找出给定字符串中的不同回文子串

2023年 8月 28日 24.2k 0

使用动态规划找出给定字符串中的不同回文子串

介绍

在本教程中,我们讨论了一种使用输入字符串找到所有可能的回文子字符串的方法。为了实现这个任务的方法,我们使用C++编程语言及其函数。

回文是一种从前往后和从后往前读都一样的字符串。例如,Mom是一个回文字符串。在本教程中,我们将取一个字符串并找出其中所有可能的回文子字符串。

Example 1

的中文翻译为:

示例1

String = abcaa

登录后复制

输出

The possible palindromic substrings are : a, b, c, aa, aaa, aba, and aca.

登录后复制

在上面的例子中,输入字符串可以生成7个回文子字符串:‘a’,‘b’,‘c’,‘aa’,‘aaa’,‘aba’和‘aca’。

Example 2

的中文翻译为:

示例2

String = “abcd”

登录后复制

输出

a, b, c, and d.

登录后复制

在上面的例子中,使用输入字符串只能得到4个长度为1的回文子串。由于输入字符串中没有重复的字符,因此没有任何子串的长度超过1。

用于示例实现的函数

  • size() − 这是一个字符串类函数,返回给定字符串中字符的数量。它不接受参数。

语法

string_name.size();

登录后复制

示例

str.size();

登录后复制

  • begin() − 这个库函数在STL中定义。它给出了map容器的起始迭代值。

  • 语法:map_name.begin();
    示例:mp.begin();

  • end() − 这个库函数在STL中定义。它给出了map容器的结束迭代值。

语法

map_name.end();

登录后复制

示例

mp.end();

登录后复制

  • substr() − 它使用输入字符串生成一个子字符串。它在string.h头文件中定义。它接受两个参数(pos,len)。Pos是子字符串的起始值,len是子字符串中的字符数。

语法

string_name.substr(pos, len);

登录后复制

示例

str.substr();

登录后复制

算法

  • 考虑一个给定的字符串,找出其中所有的回文子字符串。

  • 通过迭代字符串,找到输入字符串的所有回文子字符串。

  • 为奇数和偶数长度的回文子字符串创建两个数组。

  • 将两个数组的值存储在哈希映射中。

  • 打印存储在Hashmap中的所有值。

  • 子字符串的数量等于哈希映射的长度。通过哈希映射进行迭代,并打印出每个值。使用for循环访问映射中的每个项,并打印其关联的值。最后,打印的值的数量应与哈希映射的大小相匹配。

Logic 1 示例

在这个部分中,我们使用C++编程语言的概念实现了上面的一个例子。我们在main()函数中考虑一个输入字符串,并使用它生成输出。

#include
#include
using namespace std;

//user defined program to find the palindrome substrings
void palindromeSubStrings(string str){
map mp;
int l = str.size();

//store odd and even length palindrome substrings
int R[2][l+1];

//Using guards for effortless iteration over the input string and generating all palindrome
// substrings
str = "@" + str + "#";

for (int i = 0; i

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论