最小基因变化
难度:中等
根据题目容易想到用bfs求解,遍历期间我们需要一个map来记录已经出现过的字符串,为了方便判断,我们将基因库中的元素添加到一个set集合当中去,此外还需要一个队列用来存放需要遍历的字符串。
代码如下:
public class MinimumGeneticMutation {
static char[] items = new char[]{'A','C','G','T'};
public int minMutation(String start, String end, String[] bank) {
Set<String> set = new HashSet<>();
for (String s : bank) {
set.add(s);
}
Map<String, Integer> visited = new HashMap<>();
Deque<String> deque = new ArrayDeque();
visited.put(start, 0);
deque.add(start);
while (!deque.isEmpty()){
String poll = deque.poll();
char[] cs = poll.toCharArray();
int step = visited.get(poll);
for (int i = 0; i < cs.length; i++) {
for (char item : items) {
if (poll.charAt(i)==item) continue;
char[] clone = cs.clone();
clone[i] = item;
String s = String.valueOf(clone);
if (visited.containsKey(s)) continue;
if (!set.contains(s)) continue;
if (s.equals(end)) return step +1;
visited.put(s, step+1);
deque.add(s);
}
}
}
return -1;
}
}
执行结果:成功