Official
B - A Reverse Editorial by physics0523
受け取った \(S\) に変更を加えずにループを上手く回して正しく出力するという方法もありますが、今回は、文字列の \(l\) 文字目から \(r\) 文字目を手軽に反転する方法を紹介します。
以下の手順で実現可能です。
- \(p=l,q=r\) とする。
- 文字列の \(p\) 文字目と \(q\) 文字目とを入れ替える。
- \(p\) を \(1\) 加算、 \(q\) を \(1\) 減算する。
- \(p < q\) となっている限り、 2. と 3. を繰り返す。
なお、多くの言語では文字列の始まりは \(1\) 文字目ではなく \(0\) 文字目として扱われますが、これには予め受け取った \(l,r\) を \(1\) 減算しておくことで対応可能です。
実装例(C++):
#include<bits/stdc++.h>
using namespace std;
int main(){
int l,r;
string s;
cin >> l >> r >> s;
l--;r--;
int p=l,q=r;
while(p<q){
swap(s[p],s[q]);
p++;q--;
}
cout << s << '\n';
return 0;
}
posted:
last update: