经典的BFS暴力搜索的题目,使用一个队列进行BFS搜索即可,到达终点即返回step。
有一点需要注意,走完一层算一步。
为了不走回头路使用HashSet去存储走过的节点。
总体代码如下:
class Solution {
public int minMutation(String start, String end, String[] bank) {
HashSet<String> bank_set = new HashSet<>();
HashSet<String> visited = new HashSet<>();
char[] cs = new char[]{'A','C','G','T'};
for(int i = 0 ; i < bank.length ; i++)
{
bank_set.add(bank[i]);
}
if(!bank_set.contains(end))
return -1;
if (start.equals(end)) {
return 0;
}
Queue<String> ans = new ArrayDeque<>();
int step = 1;
ans.offer(start);
visited.add(start);
while (!ans.isEmpty())
{
int size = ans.size();
for(int r = 0 ; r < size ;r++)
{
String temp = ans.poll();
for(int i = 0 ; i < 8 ; i++)
{
for (char c: cs)
{
if(c != temp.charAt(i))
{
StringBuilder tt = new StringBuilder(temp);
tt.setCharAt(i , c);
String tem = tt.toString();
if(bank_set.contains(tem) && !visited.contains(tem))
{
if(tem.equals(end))
return step;
visited.add(tem);
ans.offer(tem);
}
}
}
}
}
step++;
}
return -1;
}
}