在C ++中计算字符串中的特殊回文
给我们一个字符串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>0ANDj<字符串长度是否小于ANDANDtemp=str[j+1]ANDsr[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