パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

正規表現 s=s.replace(/(.)\1+/g,"") を解析

2021-11-28 | 速攻で言語マスターしてみませんか

こんな問題に遭遇しました。

 

文字列が与えられ、同じ文字列がつながっていたら削除していきます。最後に残る文字を答えてください。

ただし一回の削除は同時に行っていきます。

 

aab -> b

aabba -> a

bbaab -> b    ※ bbb -> "" とはならない

aaabbabbac -> aac -> a

という問題で

 

3行で解答している人がいました。私は迷走して15分では解けませんでした。

 

正規表現はあまり知らないので少し解析してみました。

/        /g     /の間が正規表現 

.  一文字なら、なんでもOK

( ) ひとかたまりとする

¥1 1つ前のもの (¥はキーボード上の¥ではなく。キーボードの"\" バックスラッシュ)

+ いくつあってもOK

なんでもいい一文字、それを同じ文字がいくつかあれば対象という意味になるらしい。

 

正規表現は軽い簡易言語ぐらいの情報量があり、なかなか解読できませんでした。

25行から28行のようなものをちょこちょこと作ってトライアンドエラーを繰返して、なんとかわかりました。

 

正規表現の部分をPython3に移植してみたのが15行目

Python3だと /    /gではなく r'     'となるらしい (r"      "でも可)

re.subは正規表現を使ったreplace文です。


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。