【yukicoder No.730】アルファベットパネル

yukicoder No.730 アルファベットパネルの解説メモです。

単純な問題だけど色々なアプローチがあって面白いです。

問題

Yukiさんは大文字アルファベットのパネルを’A’から’Z’までそれぞれ1枚ずつ持っています。指定された文字列がYukiさんの持つパネルを並べて作成できるか答えなさい。

自分のコード

パネルは一枚ずつしかないので、入力に同じ文字があったら、”NO”という訳です。

自分の書いたコードを説明します。

入力文字列sを一文字ずつ走査し、vector配列historyに格納していきます。history に格納されている文字と入力文字列s[i]が一致したら同じ文字が二回出たと判定しプログラム終了&”NO”を出力します。

参考になる解法

他の提出者の中で気になった解法をまとめました。

C言語

A-Zに対応する配列t[26](初期値{0})を用意しておいて、入力文字を一文字ずつ走査し、対応する配列の値をインクリメントします。例えば”A”だったらt[0]をインクリメント、”B”だったらt[1]をインクリメントといった具合です。

最後に配列tの要素に1を超えるものがあったら”NO”,なかったら”YES”を出力します。

Bash

複数連続文字列にマッチする正規表現と行を入れ替えるsedのcオプションを組み合わせています。

まさかワンライナー(正確には二行)で実装できるとは思いませんでした。