두 개의 문자열 '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'이 출력됩니다.