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

假设我们有两个字符串s1和s2,它们的大小相同;我们必须检查字符串s1的某些排列是否可以破坏字符串s2的某些排列,反之亦然。如果对于范围为0至n-1的所有i,如果x [i]> = y [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],则-

    • 返回真

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

    • 排序数组s1

    • 排序数组s2

    • f3:=检查(s2,s1)

    • f4:=检查(s1,s2)

    • 返回true f3为true或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