C++中计算删除一个字符后等于两个字符串之一的字符串数量
给定两个不同的字符串,例如s1和s2,任务是组合s1和s2的唯一字母形成字符串S,然后检查从字符串S中删除一个字符后是否形成等于字符串s1或s2的字符串。
例如
输入 - 字符串S1 = "utter",字符串S2 = "butter";
输出 - 删除一个字符后等于两个字符串之一的字符串数量为:1
解释 - 给定字符串s1和s2,我们将形成字符串S,即'butter',如果我们从字符串S中删除字母'b',它将变成'utter',这等于字符串s1,因此计数为1。
输入 - 字符串S1 = "fat",字符串S2 = "rat";
输出 - 删除一个字符后等于两个字符串之一的字符串数量为:2
解释 - 给定字符串s1和s2,我们将形成字符串S,即'frat',如果我们从字符串S中删除字母'r',它将变成'fat',这等于字符串s1;如果我们删除字母'f',它将变成'rat',这等于字符串s2,因此计数为2。
下面程序中使用的算法如下:
- 声明两个字符串s1和s2,计算字符串s1的大小,并将数据传递给函数进行进一步处理。
- 声明一个变量count并将其设置为2,因为最大可能的输出是2。
- 声明两个临时变量start和end用于循环遍历。
- 从0到字符串s1的大小开始FOR循环,在循环内检查IF s1[i]不等于s2,则将start设置为i并中断。
- 从i到字符串s1大小减1开始另一个FOR循环,在循环内检查IF s1不等于s2,则将end设置为i并中断。
- 检查IF end的值小于start,则将count设置为26 * (字符串s1的大小 + 1)并返回count。
- ELSE IF 检查start等于end,则返回count。
- ELSE,从i到start + 1到end开始FOR循环,在循环内检查IF s1[i]不等于s2[i-1],则将count减1并中断。
- 从i到start + 1到end开始FOR循环,检查IF s1[i-1]不等于s2[i],则将count减1并中断。
- 返回count。
- 打印结果。
示例
#include <bits/stdc++.h> using namespace std; int equal_removal(string S1, string S2, int size_S1) { int count = 2; int start; int end; for (int i = 0; i < size_S1; ++i) { if (S1[i] != S2[i]) { start = i; break; } } for (int i = size_S1 - 1; i >= 0; i--) { if (S1[i] != S2[i]) { end = i; break; } } if (end < start) { count = 26 * (size_S1 + 1); return count; } else if (start == end) { return count; } else { for (int i = start + 1; i <= end; i++) { if (S1[i] != S2[i - 1]) { count--; break; } } for (int i = start + 1; i <= end; i++) { if (S1[i - 1] != S2[i]) { count--; break; } } return count; } } int main() { string S1 = "utter"; string S2 = "butter"; int size_S1 = S1.length(); cout << "Count of strings that become equal to one of the two strings after one removal are: " << equal_removal(S1, S2, size_S1); return 0; }
如果我们运行上面的代码,它将生成以下输出:
输出
Count of strings that become equal to one of the two strings after one removal are: 1
广告