在 C++ 中检查一个字符串是否可以破坏另一个字符串

c++server side programmingprogramming

假设我们有两个字符串 s1 和 s2,它们的大小相同;我们必须检查字符串 s1 的某些排列是否可以破坏字符串 s2 的某些排列,反之亦然。如果 x[i] >= y[i](按字母顺序),对于 0 到 n-1 范围内的所有 i,字符串 a 可以破坏字符串 b。

因此,如果输入为 s1 = abc 和 s2 = xya,则输出将为 true。这是因为"ayx"是 s2 的排列,可以破坏字符串"abc"这是 s1=<abc" 的排列。

为了解决这个问题,我们将遵循以下步骤 −

  • 定义一个函数 check(),它将采用 s1、s2,

  • 初始化 i := 0,当 i < s1 的大小时,更新(将 i 增加 1),执行 −

    • 如果 s2[i] < s1[i],则 −

      • return false

  • return true

  • 从主方法中,执行以下操作 −

  • 对数组 s1 进行排序

  • 对数组 s2 进行排序

  • f3 := check(s2, s1)

  • f4 := check(s1, s2)

  • 如果 f3 为真或 f4 为真,则返回 true,否则返回 false

示例

让我们看下面的实现,以便更好地理解 −

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool check(string& s1, string& s2){
      for (int i = 0; i < s1.size(); i++) {
         if (s2[i] < s1[i])
            return false;
      }
      return true;
   }
   bool checkIfCanBreak(string s1, string s2) {
      sort(s1.begin(), s1.end());
      sort(s2.begin(), s2.end());
      bool f3 = check(s2, s1);
      bool f4 = check(s1, s2);
      return f3 || f4;
   }
};
main(){
   Solution ob;
   cout << (ob.checkIfCanBreak("abc", "xya"));
}

输入

"abc", "xya"

输出

1

相关文章