判断回文字符串
秦枫-_-
慵懒的程序猿
展开
-
C++中心扩散法判断最长回文字符子串
以某一位或者某两位为基准中心分别向两边扩展,只要满足s[left] == s[right],即对称条件,就一直扩散,知道非对称时,则找到了此时基准中心对应的最长回文串,至于基准中心考虑到回文串可能大小可能为奇数也可能为偶数,所以要分别以 i 和(i,i+1)为中心扩展 class Solution { public: pair<int, int> expandAroundCenter(const string& s, int left, int right) { .原创 2021-04-01 17:29:30 · 300 阅读 · 1 评论 -
C++动态规划问题(1)--分割回文串
本例以把任意一个字符分割成一些子串,使每个子串都是回文串,并且输出最小分割次数为例: 以字符串aabc为例: 首先利用中心扩散法判断是回文字符串的区间,(回文字符串的判断另一篇文章中有详解), 首先,dp的定义是从s[0]到当前字符s[i]分割字符串所需的最少次数, 那么,当0-i区间是回文串时dp[i]为0,所以aabc,a和aa均是回文串, 所以dp[0],dp[1]均为0,接着若某一区间不是回文串,那我们先设一个最大分割次数即minDiv=i, 例如aab这三个字符,此时i=2,他们分割的最大次数是原创 2021-03-10 23:51:10 · 472 阅读 · 1 评论