单词接龙_最小基因变化
【摘要】 单词接龙单词接龙class Solution { public int ladderLength(String beginWord, String endWord, List<String> wordList) { if(!wordList.contains(endWord)){ //endWord不在字典中,直接返回 0; ...
单词接龙
class Solution {
public int ladderLength(String beginWord, String endWord, List<String> wordList) {
if(!wordList.contains(endWord)){
//endWord不在字典中,直接返回 0;
return 0;
}
int count = 1;
//将wordList存放在 哈希表中,提供查找效率!
HashSet<String> wordSet = new HashSet<>();
for(String x:wordList){
wordSet.add(x);
}
Queue<String> queue = new LinkedList<>();
queue.offer(beginWord);//初始化队列!
wordSet.remove(beginWord);
while (!queue.isEmpty()){
int size = queue.size();
boolean flag = false;
while (size-->0){
//出队!
String poll = queue.poll();
if(poll.equals(endWord)){
//匹配成功!
return count;
}
StringBuilder ret = new StringBuilder(poll);
//改变该字符!
for (int i = 0; i <ret.length(); i++) {
//复原该字符串!
StringBuilder str = new StringBuilder(ret);
for(char j ='a';j<='z';j++){//改变每一个位置的字符!
str.setCharAt(i,j);//将i下标的字符改成j!
if(wordSet.contains(str.toString())){
//如果在字典中,入队!
queue.offer(str.toString());
//已经使用过就在字典中移除,标记使用过!
wordSet.remove(str.toString());
flag = true;
}
}
}
}
if(flag){//进行了一层操作!并且找到了对应的单词转换!
count++;
}
}
return 0;
}
}
通过哈希表提供查找效率!
最小基因变化
class Solution {
public int minMutation(String start, String end, String[] bank) {
//ACGT
//将bank存放在哈希表中,提高查找效率
HashSet<String> bankSet = new HashSet<>();
//HashSet<StringBuilder> bankSet = new HashSet<>(); 保存 StringBuilder contains就会匹配失败!
for(String x:bank){
bankSet.add(x);
}
int count = 0;
char[] table ={'A','C','G','T'};//参照表!
//初始化
Queue<String> queue = new LinkedList<>();
queue.offer(start);
while(!queue.isEmpty()){
//处理每一层!
int size = queue.size();
boolean flag = false;//标记是否改变过!
while(size-->0){
//出队!
String str = queue.poll();
if(str.equals(end)){//匹配成功!
return count;
}
for(int i = 0;i<str.length();i++){
//改变i位置字母!
//复原该字符串!
StringBuilder ret = new StringBuilder(str);
for(int j = 0;j<table.length;j++){
ret.setCharAt(i,table[j]);//改变!
if(bankSet.contains(ret.toString())){
//有效改变!
flag = true;
//入队!
queue.offer(ret.toString());
//标记使用过!
bankSet.remove(ret.toString());
}
}
}
}
//这一层有效改变!
if(flag){
count++;
}
}
return -1;
}
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)