前提・実現したいこと
AtCoderというサイトのプログラム問題で躓いたため、アドバイス頂けないでしょうか。
対象の問題:https://atcoder.jp/contests/abs/tasks/arc065_a
英小文字からなる文字列 S が与えられます。
Tが空文字列である状態から始め、以下の操作を好きな回数繰り返すことで
S=T とすることができるか判定してください。
繰り返す操作:T の末尾に dream dreamer erase eraser のいずれかを追加する。
なお、他の方の回答を見ると、正規表現で文字列を置き換える方法でも回答が可能とは認識していますが、今回は以下のコードの方針で回答しようとした場合の問題点を解決したく考えています。
発生している問題・エラーメッセージ
一部の入力だと正しく判定できない。
ただ、どの入力だと正しく判定可能で、どの入力だと不正解かはわかりません。
該当のソースコード
javascript
1function Main(input){ 2 3 var str = input; 4 var str_length = input.length; 5 //console.log(str_length); 6 flag = "go"; 7 kekka = " "; 8 9 while(flag=="go"){ 10 if(str.substr(-5)=="dream"){ 11 str = str.substr(0,str_length-5); 12 str_length = str.length; 13 }//if dream 14 else if(str.substr(-5)=="erase"){ 15 str = str.substr(0,str_length-5); 16 str_length = str.length; 17 }//if erase 18 else if(str.substr(-6)=="eraser"){ 19 str = str.substr(0,str_length-6); 20 str_length = str.length; 21 }//if eraser 22 23 else if(str.substr(-7)=="dreamer"){ 24 str = str.substr(0,str_length-7); 25 str_length = str.length; 26 }//if dreamer 27 else if(str_length==0){ 28 flag = "end"; 29 kekka = "YES"; 30 }//if length = 0 31 else{ 32 flag = "end"; 33 kekka = "NO"; 34 }//else 35 36 }//while end 37 38 39 console.log(kekka); 40}//function end 41 42Main(require("fs").readFileSync("/dev/stdin", "utf8"));
試したこと
以下の入力の場合は正しく判定できました。
「erasedream」「dreameraser」「dreamerer」
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/08 14:33