解题思路:http://blog.csdn.net/miss_ruochen/article/details/17199887
不要忘了添加头文件呀
int who_win (string word, map<string, int>& m)
{
typedef pair <string, int> Who_Pair;
int size = word.size();
if(size < 2)
return -1;
if(size == 2)
return 1;
if(size == 3) {
if(word[0] >= word[1] && word[1] >= word[2])
return 0;
else
return 1;
}
for(int i = 0; i < size; ++i) {
if(i != 0 && word[i] == word[i-1])
continue;
string str = word.substr(0,i)+word.substr(i+1,size-i-1);
bool flag = true;
for(int j = 0; j < size-2; ++j) {
if(str[j] >= str[j+1]) {
flag = false;
break;
}
}
if(flag)
return 1;
}
for(int k = 0; k < size; ++k) {
if(k != 0 && word[k] == word[k-1])
continue;
string strtmp = word.substr(0,k)+word.substr(k+1,size-k-1);
map<string, int> :: iterator m_iter;
m_iter = m.find(strtmp);
int state;
if(m_iter == m.end()) {
state = who_win(strtmp, m);
m.insert( Who_Pair (strtmp, state) );
}
else {
state = m_iter->second;
}
if( !state )
return 1;
}
m.insert( Who_Pair (word, 0) );
return 0;
}
int who (string word)
{
map<string, int> m;
typedef pair <string, int> Who_Pair;
m.insert( Who_Pair ("a",0) );
return who_win(word, m);
}
忘了说,为什么我在who函数里要给map插入一个字符'a',因为我不想每次在查找前都要判断map是否为空,不知道频繁的判断是不是会降低速度,所以我宁愿随便插入点什么了,而且字符'a’长度为1不会影响原思路的判断的,随便给的而已