두 개의 문자열 'a'와 'b'가 주어졌다고 가정하면, 작업은 문자열 'a'를 시계 반대 방향 또는 시계 방향으로 정확히 두 자리 회전하여 문자열 'b'를 얻을 수 있는지 여부를 찾는 것입니다. 예를 들어,
입력-1 -
a = google b = legoog
출력 -
True
설명 − 문자열 'google'은 시계 반대 방향으로 두 자리 회전할 수 있으며 결과적으로 문자열 'legoog'가 생성됩니다. 따라서 True를 반환합니다.
입력-2 -
a = tuorialst b = tutorials
출력 -
False
설명 - 문자열 'tuorialst'는 다른 문자열 'tutorials'를 얻기 위해 어떤 방향으로든 두 위치만큼 회전할 수 없습니다. 따라서 False를 반환합니다.
이 문제를 해결하는 데 사용된 접근 방식
주어진 두 문자열에 대해 이 접근 방식에는 두 가지 경우가 있습니다.
-
반시계 방향 회전용
-
시계 방향 회전
먼저 두 문자열의 길이가 다르면 false를 반환합니다. 그렇지 않고 두 문자열의 길이가 '2'보다 작거나 같으면 True를 반환합니다.
다른 경우에는 시계 반대 방향으로 두 자리를 회전하여 문자열 'b'의 부분 문자열이 문자열 'a'와 같은지 확인한 다음 True를 반환합니다. 그렇지 않으면 거짓입니다.
마찬가지로, 문자열 'b'를 시계 방향으로 두 자리 회전하여 문자열 'a'와 같게 되면 True를 반환하고 그렇지 않으면 false를 반환합니다.
-
두 개의 입력 문자열 'a'와 'b' 사용
-
부울 함수 checkRotated(문자열 a, 문자열 b)는 두 개의 문자열 'a'와 'b'를 취하고 문자열 'b'를 시계 반대 방향 또는 시계 방향으로 회전하여 동일한 경우 반환합니다.
-
문자열 'a'와 문자열 'b'의 길이를 확인하세요.
-
시계 반대 방향으로 두 자리 회전하여 문자열 'b'의 부분 문자열을 찾습니다.
-
이제 결과 부분 문자열이 문자열 'a'와 같은지 확인하고 같으면 true를 반환합니다.
-
문자열 'b'의 부분 문자열을 시계 방향으로 두 곳에서 회전하여 찾습니다.
-
이제 결과 부분 문자열이 문자열 'a'와 같은지 확인하고 같으면 true를 반환합니다.
-
문자열이 같지 않으면 false를 반환합니다.
예시
#include<bits/stdc++.h>
using namespace std;
bool checkRotated(string str1, string str2){
if (str1.length() != str2.length())
return false;
if(str1.length() <= 2 || str2.length() <= 2)
return (str1 == str2);
string s1= str2.substr(str2.size()-2, str2.size());
string s2= str2.substr(0,str2.size()-2);
string s3= s1+s2;
if(s3==str1)
return true;
string s4= str2.substr(2,str2.size());
string s5= str2.substr(0,2);
string s6= s4+s5;
if(s6==str1)
return true;
return false;
}
int main(){
string a= "google";
string b="legoog";
cout<<checkRotated(a,b)<<endl;
return 0;
} 출력
위의 코드를 실행하면 출력이 다음과 같이 인쇄됩니다.
1
위 코드의 출력은 "True"이므로 '1'이 출력됩니다.