在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,并在循环内部检查IF s1 [i]不等于s2,然后将start设置为i并中断

  • 从i开始另一个循环FOR直到字符串s1的大小减小一倍,然后在循环内部检查IF s1不等于s2,然后将end设置为i并中断

  • 检查end的IF值是否小于然后开始,然后将count设置为26 *(字符串s1的大小+ 1)并返回count。

  • ELSE IF检查开始等于结束然后返回计数

  • 否则,从i开始循环FOR,从i开始+1直到结束,并在循环内部检查IF s1 [i]不等于s2 [i-1],然后将计数减1并中断

  • 从i开始循环FOR,从开始+1开始直到结束,并检查IF s1 [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

猜你喜欢