给我们一个字符串str。目的是计算所有属于特殊回文且长度大于1的str子字符串。特殊回文是具有相同字符或仅具有不同中间字符的字符串。例如,如果字符串是“ baabaa”,则原始子字符串的特殊回文是“ aa”,“ aabaa”,“ aba”,“ aa”
让我们通过示例来理解。
输入-str =“ abccdcdf”
输出-字符串中的特殊回文数为-3
说明-特殊回文的子字符串为-“ cc”,“ cdc”,“ dcd”
输入-str =“ baabaab”
输出-字符串中的特殊回文数为-4
说明-特殊回文的子字符串为-“ aa”,“ aabaa”,“ aba”,“ aa”
创建一个字母字符串并计算其长度。将数据传递给函数进行进一步处理。
声明一个临时变量count并将i设置为0
创建一个字符串大小的数组,并将其初始化为0。
从WHILE开始,直到我小于字符串的长度
在while内,将变量total设置为1并将变量j设置为i + 1
开始另一个WHILE,直到str [i] = str [j]和j小于字符串的长度
在while内,将总数加1,将j加1
将计数设置为count +(total *(total + 1)/ 2,arr [i]等于total,i等于j
从j到1开始循环FOR,直到字符串的长度
检查str [j] = str [j-1],然后将arr [j]设置为arr [j-1]
将变量temp设置为str [j-1]并检查j> 0 AND j <字符串长度是否小于AND AND temp = str [j + 1] AND sr [j]!= temp,然后将count设置为count + min(arr [j-1],arr [j + 1])
设置计数-字符串的长度
返回计数
打印结果。
#include <bits/stdc++.h> using namespace std; int count_palindromes(string str, int len){ int count = 0, i = 0; int arr[len] = { 0 }; while (i < len){ int total = 1; int j = i + 1; while (str[i] == str[j] && j < len){ total++; j++; } count += (total * (total + 1) / 2); arr[i] = total; i = j; } for (int j = 1; j < len; j++){ if (str[j] == str[j - 1]){ arr[j] = arr[j - 1]; } int temp = str[j - 1]; if (j > 0 && j < (len - 1) && (temp == str[j + 1] && str[j] != temp)){ count += min(arr[j-1], arr[j+1]); } } count = count - len; return count; } int main(){ string str = "bcbaba"; int len = str.length(); cout<<"Count of special palindromes in a String are: "<< count_palindromes(str, len); return 0; }
输出结果
如果我们运行上面的代码,它将生成以下输出-
Count of special palindromes in a String are: 3