Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 문자열이 다른 문자열을 끊을 수 있는지 확인

<시간/>

크기가 같은 두 개의 문자열 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