Anagrams by Stack--zju

来源:互联网 发布:怎么在mac上下载webex 编辑:程序博客网 时间:2024/05/22 12:03

Sample Input
madam
adamm
bahama
bahama
long
short
eric
rice
Sample Output
[
i i i i o o o i o o
i i i i o o o o i o
i i o i o i o i o o
i i o i o i o o i o
]
[
i o i i i o o i i o o o
i o i i i o o o i o i o
i o i o i o i i i o o o
i o i o i o i o i o i o
]
[
]
[
i i o i o i o o
]


#include<iostream>  #include<string>#include<stack>#include<vector>using namespace std;  string s,t;stack<char> st;vector<char> v;//分析只有两种情况:1.入栈 2.如果匹配就可以弹出bool IsVaild(){if(s.size()!=t.size())return false;int s_cnt[26],t_cnt[26];fill(s_cnt,s_cnt+26,0);fill(t_cnt,t_cnt+26,0);int i;for(i=0;i<s.size();i++){s_cnt[s[i]-'a']++;t_cnt[t[i]-'a']++;}for(i=0;i<s.size();i++){if(s_cnt[i]!=t_cnt[i])return false;}return true;}void solve(int s_i,int t_i){if(s_i==s.size() && t_i==t.size() && v.size()==t.size()+t.size()){for(int i=0;i<v.size();i++){//if(i==0)cout<<v[i]<<" ";//else//cout<<" "<<v[i];}cout<<endl;//注意这里不需要qinko}if(s_i!=s.size()){v.push_back('i');st.push(s[s_i]);solve(s_i+1,t_i);st.pop();v.pop_back();}if(st.empty()!=true){if(st.top()==t[t_i]) //如果stack栈顶和t中的index一样,可以弹出{v.push_back('o');char t=st.top();st.pop();solve(s_i,t_i+1);v.pop_back();st.push(t);}}}int main(){while(cin>>s>>t){v.clear();cout<<"["<<endl;if(IsVaild()){solve(0,0);}cout<<"]"<<endl;}return 0;}


原创粉丝点击