C ++中索引范围内的回文子串计数
给我们一个字符串,从开始到结束的范围,任务是计算给定范围内回文子字符串的计数。回文字符串是从字符串的前向和后向相似的字符串,例如nitin,aba等。
例如
输入 -InputString =“ cccaabbbdee”,开始= 2,结束= 6;
输出- 索引范围7中的回文子串计数
说明- 我们给定了一个范围和一个字符串,因此,我们将从开始指针2(即'c')开始遍历该字符串,直到6即'b'遍历该字符串,因此子字符串为'caabb'。因此回文子串是'c','a','a','b','b','aa'和'bb'。因此,回文子串的计数为7。
输入 -InputString =“ lioaabbbdee”,开始= 0,结束= 2;
输出- 索引范围3中的回文子串计数
说明- 我们给出了一个范围和一个字符串,因此,我们将从起始指针0(即“ l”)开始遍历字符串,直到2即“ o”,因此子字符串为“ lio”。因此回文子串是“ l”,“ i”和“ o”。因此,回文子串的计数为3。
以下程序中使用的方法如下
声明任何给定大小的字符串,其范围从变量开始到结束。
将数据传递给命名的函数以palindrome_index(arr, InputString)进行进一步处理
在函数内部,声明另一个名为checked的数组,其大小为array。
从0开始到i的循环直到数组的长度
在循环内部,从0到数组的长度开始另一个Loop FOR j
在循环内部,将check设置为check [i] [j] = 0和arr [i] [j] = 0
从长度-1到i大于0开始对i进行循环
在循环内部,将i的check和arr设置为1,然后从i +1开始另一个循环FOR j,直到数组的长度
在循环内,检查ii处的IF字符串等于j处的字符串,并且i + 1大于j-1或check [i + 1] [j-1])不等于0,然后设置check [i] [j]设为1 ELSE,将check [i] [j]设置为0,然后设置arr [i] [j] = arr [i] [j-1] + arr [i + 1] [j]-arr [i + 1] [j-1] +选中[i] [j]
打印二维数组作为开始和结束。
示例
import java.io.*;class testqwe {
static void palindrome_index(int arr[][], String s) {
int length = s.length();
int[][] check = new int[length + 1][length + 1];
for (int i = 0; i <= length; i++) {
for (int j = 0; j <= length; j++) {
check[i][j] = 0;
arr[i][j] = 0;
}
}
for (int i = length - 1; i >= 0; i--) {
check[i][i] = arr[i][i] = 1;
for (int j = i + 1; j < length; j++) {
if(s.charAt(i) == s.charAt(j) && (i + 1 > j - 1 || (check[i + 1][j - 1]) != 0)) {
check[i][j] =1;
} else {
check[i][j] =0;
}
arr[i][j] = arr[i][j - 1] + arr[i + 1][j] - arr[i + 1][j - 1] + check[i][j];
}
}
}
public static void main(String args[]) {
String InputString = "cccaabbbdee";
int[][] arr;
arr = new int[50][50];
palindrome_index(arr, InputString);
int start = 2;
int end = 6;
System.out.println("索引范围内回文子串的计数 " + arr[start][end]);
}
}
如果我们运行上面的代码,它将生成以下输出-
输出结果
索引范围内回文子串的计数 7
以上是 C ++中索引范围内的回文子串计数 的全部内容, 来源链接: utcz.com/z/325140.html