意外と難しいかもしれない。for
文を回しながら、「前の文字」を見る技術を手に入れよう!
問題概要
文字 j, o, i からなる長さ の文字列 が与えられる。
この文字列をテキストエディタに打ち込むことを考える。同じ文字が 2 個連続したとき、それらの文字はともに大文字になる。
最終的に打ち込まれた文字列を求めよ。
解法
たとえば jjoiii
と打ち込むと、JJoIIi
となる。
具体的には、次のようにすればよい。
について、
もし の 文字目と、 文字目とが等しいならば、 文字目と 文字目を大文字に変換する
ここで、 からではなく、 から回していることに注意しよう。 に対しては、 の 文字目にはアクセスできないのだ。
コード
#include <bits/stdc++.h> using namespace std; int main() { int N; string S; cin >> N >> S; for (int i = 1; i < N; ++i) { if (S[i] == S[i-1]) { S[i] = S[i] + 'A' - 'a'; S[i-1] = S[i-1] + 'A' - 'a'; } } cout << S << endl; }