/******************判断pop是否是src的合法出栈序列*****************************/
bool isPopSeq(string src, string pop){
stack<char> sch;
int len=pop.length();
if(src.length()!=pop.length())
return false;
for(int i=0;i<len;i++){
int idx=src.find(pop[i]);
if(idx==string::npos && sch.empty()) //若在初始序列找不到并且栈为空则非法
return false;
else if(idx!=string::npos){ //若在初始序列找到了,则将后续字符依次入栈,同时将顶上元素抛出
for(int j=0;j<=idx;j++)
sch.push(src[j]);
src.erase(src.begin(),src.begin()+idx+1);
sch.pop();
}
else if(idx==string::npos && !sch.empty()){ //若在初始序列中找不到且栈非空,则比较栈顶元素与出栈序列元素是否相等,不相等则非法。
char ch=sch.top();
if(ch==pop[i])
sch.pop();
else
return false;
}
}
return true;
}
#define judgeSeq(src,pop) \
if(isPopSeq(src,pop)) cout << "is a valid seq" << endl; \
else cout << "is a inValid seq" << endl;