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

更新于: 2021年1月29日

443 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告