假设我们有两个字符串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