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到数组的长度开始另一个LoopFORj
在循环内部,将check设置为check[i][j]=0和arr[i][j]=0
从长度-1到i大于0开始对i进行循环
在循环内部,将i的check和arr设置为1,然后从i+1开始另一个循环FORj,直到数组的长度
在循环内,检查ii处的IF字符串等于j处的字符串,并且i+1大于j-1或check[i+1][j-1])不等于0,然后设置check[i][j]设为1ELSE,将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