크기가 같은 두 개의 문자열 s1과 s2가 있다고 가정합니다. 문자열 s1의 일부 순열이 문자열 s2의 일부 순열을 깨뜨릴 수 있는지 또는 그 반대의 경우도 확인해야 합니다. 문자열 a는 x[i]>=y[i](알파벳순)인 경우 0에서 n-1 범위의 모든 i에 대해 문자열 b를 중단할 수 있습니다.
따라서 입력이 s1 =abc 및 s2 =xya와 같으면 출력은 true가 됩니다. 이는 "ayx"가 s1="abc"의 순열인 "abc" 문자열로 중단될 수 있는 s2의 순열이기 때문입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
check() 함수를 정의하면 s1, s2,
가 필요합니다. -
initialize i :=0의 경우, i
-
s2[i]
-
거짓 반환
-
-
-
true를 반환
-
기본 방법에서 다음을 수행하십시오 -
-
배열 s1 정렬
-
배열 s2 정렬
-
f3 :=체크(s2, s1)
-
f4 :=체크(s1, s2)
-
f3이 true이거나 f4가 true이면 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