给定vector<string> 判断是否是 可以首尾相连成一个环,相邻两个串的头和尾字符一样
class Solution{
public:
int n;
vector<int> v;
vector<string> vs_;
unordered_map<char, vector<int>> um;
bool Circle(vector<string> vs){
int save=0;
for(int i=0;i<vs.size();i++){
if(vs[i]!="") vs[save++]=vs[i];
}
vs.resize(save);
vs_=vs;
um.clear();
n=vs.size();
for(int i=0;i<n;i++){
um[vs[i][0]].push_back(i);
}
v.assign(n, 0);
//int start=0, cnt=1;;
//int index=0;
return dfs(0, 0);
//return v[index].back()==v[start][0];
}
bool dfs(int now, int i){
if(!um.count(vs_[i].back())) return 0;
if(now>=n && i==0) return 1;
for(auto e: um[vs_[i].back()]){
int index=e;
if(v[index]) continue;
v[index]=1;
if(dfs(now+1, index)) return 1;
v[index]=0;
}
return 0;
}
} S;