C++ 中给定字符串中长度为三的子序列计数
给定字符串 str 和长度为 3 的子字符串 sub_str。目标是在 str 中查找子字符串 sub_str 的计数。例如,“act”在“cataract”中出现三次(cataract、cataract、cataract)。
让我们通过示例来理解。
输入 − str= “settlement” sub_str=”set”
输出 − 给定字符串中长度为三的子序列的计数为:5
解释 − 子序列将是 −
1. set tlement, 2. se t t lement, 3. se ttlemen t, 4. s ettl e men t, 5. settlem e n t
输入 − str= “knowledge” sub_str=”now”
输出 − 给定字符串中长度为三的子序列的计数为 − 1
解释 − 子序列将是 − know ledge
下面程序中使用的方法如下
我们将使用 for 循环遍历字符串 str。如果任何 str[i]==sub_str[0],则将下一个字符 sub_str[1] 与 str[当前 i 到 i<length] 进行比较,如果在索引 j 处找到匹配,则将最后一个字符 sub_str[2] 与 str[当前 j 到 j<length] 进行比较。如果找到两个匹配项,则递增计数。
将字符串作为 str,子字符串作为 sub_str。
函数 subset_occurrence(string str, int length, string sub_str) 获取字符串并返回 str 中与 sub_str 相同的子序列的计数。
使用 for 循环遍历 str。从 i=0 到 i<length。
如果任何 str[i]==sub_str[0],则找到第一个字符。通过 j=i+1 到 j<length 检查下一个。
如果任何 str[j]==sub_str[1],则第二个字符匹配。通过 k=j+1 到 k<length 检查下一个。
如果 str[k]==sub_str[2]。递增计数。
返回计数作为结果。
示例
#include<iostream> using namespace std; int subset_occurrence(string str, int length, string sub_str){ int count = 0; for (int i=0; i<length; i++){ if (str[i]==sub_str[0]){ for (int j=i+1; j< length; j++){ if(str[j]==sub_str[1]){ for(int k=j+1; k<length; k++){ if(str[k]==sub_str[2]) { count++; } } } } } } return count; } int main(){ string str = "TUTpoinTUTpoinTUT"; int length = str.length(); string sub_str = "TUT"; cout<<"Count of subsequence of length three in a given string are: "<<subset_occurrence(str, length, sub_str); return 0; }
输出
如果我们运行以上代码,它将生成以下输出 -
Count of subsequence of length three in a given string are: 19