题目
代码
class Solution {
public int minMutation(String start, String end, String[] bank) {
HashSet<String> set = new HashSet<>();
for(String b:bank) set.add(b); //把bank中的字符都存到set
if(!set.contains(end)) return -1;
LinkedList<String> que = new LinkedList<>();
que.offer(start);
if(set.contains(start)) set.remove(start); //必须删除掉 免得影响转换
int res = 0;
char[] ch = {'A','C','G','T'};
while(!que.isEmpty()){
res++;
int size = que.size();
for(int i = 0;i<size;i++){
char[] cur = que.poll().toCharArray();//取出第一个String并转为char
for(int j = 0;j<8;j++){
char tmp = cur[j];
//换第j位上的基因,这一步一定会成功进行的--->换某个位置上的基因更新整体String直到New的string存在bank,此时把新的String加入队列,并从bank中移除
for(int k = 0;k<4;k++){
if(tmp!=ch[k]){
cur[j] = ch[k];//尝试转换并新建一String s
String s = new String(cur);
if(set.contains(s)){ //如果s在基因库中
if(s.equals(end)) return res; //s等于最终值则返回res数目
set.remove(s); //若不等于把 , 则去除库中的s免得影响后面
que.offer(s); //队列中重新加入并改造
}
}
}//一次换基因成功后,重新换回来,进行下一个j的基因位替换并存于que
cur[j] = tmp;
}
}
}return -1;
}
}