두 개의 소문자 문자열 s와 t가 있다고 가정합니다. 이제 s에 있는 모든 문자를 다른 문자로 바꾸는 작업을 고려하십시오. 이 작업을 여러 번 수행할 수 있다면 s가 t로 변환될 수 있는지 여부를 확인해야 합니다.
따라서 입력이 s ="eye" t ="pip"와 같으면 출력은 True가 됩니다. "e"를 "p"로, "y"를 "i"로 바꿀 수 있기 때문입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
하나의 맵 m1 및 다른 맵 m2 정의
-
n :=s
의 크기 -
initialize i :=0의 경우, i
-
s[i]가 m1에 있으면 -
-
m1[s[i]]가 t[i]와 같으면 -
-
다음 반복으로 이동
-
-
거짓을 반환
-
-
그렇지 않으면
-
m1[s[i]] :=t[i]
-
-
-
true를 반환
예시
더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −
#include <bits/stdc++.h>
using namespace std;
bool solve(string s, string t) {
map m1, m2;
int n = s.size();
for(int i = 0; i <n; i++){
if(m1.count(s[i])){
if(m1[s[i]] == t[i]) continue;
return false;
}
else{
m1[s[i]] = t[i];
}
}
return true;
}
int main(){
string s = "eye", t = "pip";
cout << solve(s, t);
} 입력
"eye","pip"
출력
1