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

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

介绍

在本教程中,我们讨论了一种使用输入字符串找到所有可能的回文子字符串的方法。为了实现这个任务的方法,我们使用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 substringsvoid 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  0; r--)               mp[str.substr(x - r - 1, 2 * r + y)]=1;         mp[string(1, str[x])]=1;   }         //print the palindrome substrings stored in the Hashmap   cout ::iterator xx;   for (xx = mp.begin(); xx!=mp.end(); ++xx)      cout 

输出

Palindrome substrings are listed as:aaabc

登录后复制

Logic 2 示例

我们正在使用动态规划方法实施另一个示例。在动态规划中,任务被分解为子任务并单独解决,以减少时间和复杂度。

#include #include using namespace std;//User defined function to find the palindromic substring int find(string str){   int a = str.size();   //defined dpg array      vector > dpg(a, vector(a, false));      for (int x = 0; x  kmp(a, 0);   for (int x = 0; x  0) {            y = kmp[y - 1];         }         else {            kmp[m++] = 0;         }      }   }   int cnt = 0;   for (int x = 0; x 

输出

aababaaTotal number of palindromes are 4

登录后复制

结论

在本教程中,我们开发了两种方法来查找给定字符串中所有可能的回文子字符串。我们通过两个示例来理解任务,并使用C++编程语言编写了一个示例代码。我们使用哈希映射和向量来存储回文子字符串以实现示例。哈希映射的使用有助于匹配键值对,我们可以根据需要使用许多哈希函数。我们还使用了一些库函数来实现示例。

以上就是使用动态规划找出给定字符串中的不同回文子串的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2587323.html

(0)
上一篇 2025年3月6日 15:33:01
下一篇 2025年2月24日 16:11:29

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论