在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中删除字母'rs',它将变成'fat',它等于字符串s1,并且如果我们删除了字母“f”将变成“rat”,等于字符串s2,因此计数为2。
以下程序中使用的方法如下
声明两个字符串s1和s2并计算字符串s1的大小,并将数据传递给函数以进行进一步处理。
声明一个变量计数并将其设置为2,因为可能的最大输出为2。
声明两个临时变量作为循环遍历的开始和结束。
从0直到字符串s1的大小开始循环FOR,并在循环内部检查IFs1[i]不等于s2,然后将start设置为i并中断
从i开始另一个循环FOR直到字符串s1的大小减小一倍,然后在循环内部检查IFs1不等于s2,然后将end设置为i并中断
检查end的IF值是否小于然后开始,然后将count设置为26*(字符串s1的大小+1)并返回count。
ELSEIF检查开始等于结束然后返回计数
否则,从i开始循环FOR,从i开始+1直到结束,并在循环内部检查IFs1[i]不等于s2[i-1],然后将计数减1并中断
从i开始循环FOR,从开始+1开始直到结束,并检查IFs1[i-1]不等于s2[i],然后将计数减1并中断
返回计数。
打印结果。
示例
#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 << "一次删除后变成等于两个字符串之一的字符串的计数为: " << equal_removal(S1, S2, size_S1); return 0; }
如果我们运行上面的代码,它将生成以下输出-
输出结果
一次删除后变成等于两个字符串之一的字符串的计数为: 1