for
文の練習!
問題概要
英小文字からなる文字列 が与えられる。
に含まれる文字 'a' のうち、最も右側にあるものについて、その添字を答えよ。ただし、'a' が含まれない場合は -1 を出力せよ。
考えたこと
「最も右側」という条件がなければ、次のように書けるだろう。これはごくありふれた「条件を満たす添字を求めよ」というタイプの問題に対する回答としてよくある書き方だ。
int res = -1; // 現れないことを想定して -1 を初期値にする for (int i = 0; i < S.size(); i++) { if (S[i] == 'a') res = i+1; // 「+1」は 0-indexed を直すため } }
そして実は、これだけですでに「最も右側の添字」が求められているのだ。なぜならば、条件を満たす添字 i
が見つかるたびに
res = i+1;
という更新を行っているからだ。つまり res
には「最後に更新したときの添字」が格納されているのだ。
というわけで、この問題は解けた。
コード
#include <bits/stdc++.h> using namespace std; int main() { string S; cin >> S; int res = -1; // 現れないことを想定して -1 を初期値にする for (int i = 0; i < S.size(); i++) { if (S[i] == 'a') res = i+1; } cout << res << endl; }