メモリ不足。とほほ。11/09 土
「初心者用の問題」を解いていたのですが、再帰的な関数を使用するような問題で、単純に文字列を引数に用いたところ、あっという間にメモリ不足になりました。
これじゃあだめですよね。ちなみに、プログラムは次のとおり。
#include <bits/stdc++.h>
using namespace std;
int kensa(string tmp,int num) {
string s2,s3,s4;
int res;
if (tmp == "") {
return 1;
}
// case "dream"
s2 = tmp.substr(0,5);
if (tmp.substr(0,5) == "dream" ) {
res = kensa( tmp.substr(5), num+1);
}
if (res == 1) return 1;
// case "dreamer"
s2 = tmp.substr(0,7);
if (tmp.substr(0,7) == "dreamer" ) {
res = kensa( tmp.substr(7), num+1);
}
if (res == 1) return 1;
// case "erase"
s2 = tmp.substr(0,5);
if (tmp.substr(0,5) == "erase" ) {
res = kensa( tmp.substr(5), num+1);
}
if (res == 1) return 1;
// case "eraser"
s2 = tmp.substr(0,6);
if (tmp.substr(0,6) == "eraser" ) {
res = kensa( tmp.substr(6), num+1 );
}
if (res == 1) return 1;
return 0;
}
int main() {
int res;
string S;
cin >> S;
res = kensa(S,1);
if (res==1) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
}
冒頭の kensa 関数で、文字列を引数にしているので、うまくいきません。文字列のポインタを引数にするように、これから変更します。