いろんな方法がある! ここでは、文字 '|' のある 2 つの添字を特定するという方法で挑むことにする。
問題概要
英小文字と |
のみからなる文字列 が与えられる。 は |
をちょうど 2 個含むことが保証される。
2 つの |
の間にある文字および |
を から削除して得られる文字列を答えよ。
考えたこと
ここでは次の 2 つの値を求めることとした。
left
:S[i] = '|'
であるようなi
の小さい方の値right
:S[i] = '|'
であるようなi
の大きい方の値
これは for
文を一回回せば求められる(下のコードを参照)。これらの値が求められたら、
left
の左側の文字列:S.substr(0, left)
right
の右側の文字列:S.substr(right + 1)
を連結したものが答えとなる。
コード
#include <bits/stdc++.h> using namespace std; int main() { string S; cin >> S; // left: 左側の '|' の添字、right: 右側の '|' の添字 int left = -1, right = -1; for (int i = 0; i < S.size(); ++i) { if (S[i] == '|') { if (left == -1) left = i; else right = i; } } // left の左側と、right の右側のみを取り出す cout << S.substr(0, left) + S.substr(right + 1) << endl; }