题目
代码(首刷看解析)
三层for循环,我是真不敢想啊,超时了咋办,结果真得遍历三层。。。
class Solution {
public:
int minMutation(string startGene, string endGene, vector<string>& bank) {
char posssible[4] = {'A', 'C', 'G', 'T'};
queue<string> q;
q.push(startGene);
int res = 1;
unordered_set<string> visited;
visited.insert(startGene);
while(!q.empty()) {
int sz = q.size();
for(int i = 0; i < sz; i++) {
auto front = q.front();
q.pop();
for(int j = 0; j < 8; j++) {
for(int k = 0; k < 4; k++) {
if(posssible[k] != front[j]) {
string str = front;
str[j] = posssible[k];
if(!visited.count(str) && find(bank.begin(), bank.end(), str) != bank.end()) { // 未访问过且在bank里
if(str == endGene)
return res;
q.push(str);
visited.insert(str);
}
}
}
}
}
res++;
}
return -1;
}
};