Official
B - typo Editorial by penguinman
\(S\) と \(T\) が一度も操作を行わない状態で一致しているか、および \(i=1,2,\ldots,(S\) の長さ\()-1\) について \(S\) の \(i\) 文字目と \(i+1\) 文字目を入れ替えた場合に \(S\) と \(T\) が一致するかをそれぞれ判定すればよいです。
計算量は \(N=(S\) の長さ\()\) として \(O(N^2)\) となります。
実装例 (Python)
S = list(input())
T = list(input())
ans = "No"
if S == T:
ans = "Yes"
for i in range(len(S)-1):
S[i],S[i+1] = S[i+1],S[i]
if S == T:
ans = "Yes"
S[i],S[i+1] = S[i+1],S[i]
print(ans)
また、工夫をすると計算量を \(O(N)\) まで落とすことも可能です。
実装例 (C++)
#include<bits/stdc++.h>
using namespace std;
int main(){
string S,T; cin >> S >> T;
string ans = "No";
if(S == T) ans = "Yes";
for(int i=0; i<S.size(); i++){
if(S[i] != T[i]){
if(0 < i){
swap(S[i-1],S[i]);
if(S == T) ans = "Yes";
swap(S[i-1],S[i]);
}
if(i+1 < S.size()){
swap(S[i],S[i+1]);
if(S == T) ans = "Yes";
swap(S[i],S[i+1]);
}
break;
}
}
cout << ans << endl;
}
posted:
last update: