Quantcast
Channel: 初心者タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 21093

ABC049C - 白昼夢を簡単に導く方法が知りたい(Golang)

$
0
0

はじめに

ABC049C - 白昼夢を検索文字列の特性上、文字列をリバースして導く方法で解きました。
解きかたはさておき、検索能力の低さゆえ、Goに以下標準関数が見つけられず手作りとなってしまったので、検索能力向上した際には改良したいと思いメモです。

  • 文字列のリバース
  • 開始〜終了桁数を指定した文字列の抜き出し(例:abcを1文字目から2文字目で抜き出して「b」を求める)

コード

packagemainimport("fmt")funcmain(){varsstringannwer:="YES"divide:=[4]string{"dream","dreamer","erase","eraser"}fmt.Scanf("%s",&s)// リバースfori:=0;i<len(divide);i++{divide[i]=getReverse(divide[i])}reverse:=getReverse(s)// 後ろから一致するものを抜き出すj:=0// 開始位置forj<len(reverse){annwer="NO"fori:=0;i<4;i++{// 比較する文字列を必要な範囲で抜き出すvarstrstringfork:=j;k<j+len(divide[i]);k++{ifk>=len(reverse){continue}str+=string(reverse[k])}// 比較ifstr==divide[i]{// 一致した分開始位置をずらすj+=len(divide[i])annwer="YES"break}}// ここにNOで来た時点でアウトなので終わりifannwer=="NO"{break}}fmt.Println(annwer)}funcgetReverse(sstring)string{rs:=[]rune(s)// 今回マルチバイト文字ではないが想定してrunefori,j:=0,len(s)-1;i<j;i,j=i+1,j-1{rs[i],rs[j]=rs[j],rs[i]}returnstring(rs)}

おわりに

冗長すぎておかしくなりそうでした。
あまりニッチではないライブラリで実現可能でしたら教えていただけると嬉しいです。
追伸:別解としてReplaceで一致したら""と置換してしまい、最後0文字になったらYESという方法は認識しております。


Viewing all articles
Browse latest Browse all 21093

Trending Articles