【LeetCode】Word Ladder 字符串

题目:Word Ladder

<span style="font-size:18px;">/**LeetCode word ladder
 * 题目:给定一个起始单词和一个终结单词以及一个字典,要求每次变换一个字符,成为字典中新的词,直到变为最后的词,要求其最短路径
 * 思路:利用队列,先弹出第一个词,分别将词中每一个字符替换直到找到一个字典中存在的词,加入队列,直到匹配的词是最后一个,此时终止
 * 如果没有这样的路径,则返回0
 */
package javaTrain;

import java.util.LinkedList;
import java.util.Set;

public class Train21 {
	public int ladderLength(String start, String end, Set<String> dict) {
        if(dict.size() == 0) return 0;
        LinkedList<String> queue = new LinkedList();
        String tag = new String();
        queue.add(start);
        queue.add(tag);
        int len = 1;
        while(queue.size() > 1){
        	String top = queue.pop();
        	if(top == tag){	//标志着对于一个词的每个字符的替换测试已经结束,有用的都放在队列后面了
        		len++;
        		queue.add(tag);
        		continue;
        	}
        	else if(top == end){
        		return len;
        	}
        	for(int i = 0;i < top.length();i++){
        		char[] zifu = top.toCharArray();
        		for(char c = 'a';c <= 'z';c++){
        			zifu[i] = c;
        			String newWord = new String(zifu);
        			if(dict.contains(newWord)){
        				queue.add(newWord);
        			}
        			dict.remove(newWord);
        		}
        	}
        } </span>
<span style="font-size:18px; font-family: Arial, Helvetica, sans-serif;"><span style="white-space:pre">	</span>return 0;</span>
<span style="font-size:18px;">    }
}
</span>
时间: 2024-10-25 00:55:30

【LeetCode】Word Ladder 字符串的相关文章

[LeetCode]Word Ladder 字符串的最短转换距离 (Dijkstra)

要求最短距离.采用dijkstra求节点间最短路径. 注意点:如果是枚举字典中两两元素是否可转换的话,会超时. 改进:对于每个字符串,枚举其各位字符的取值情况,则对于长度为n的一个字符串要枚举n*26次. 如果只是简单的枚举,则会出现重边: 如abc,bbc,cbc,建图后每两个节点间均有两条双向边,这对于邻接表存储的图会存在很多冗余边. 解决方法:每个节点每位字符只能从原始字符往后枚举,即 枚举各字符串第一位的话 abc:bbc,cbc,dbc,... bbc:cbc,dbc,... cbc:

[leetcode]Word Ladder II @ Python

[leetcode]Word Ladder II @ Python 原题地址:http://oj.leetcode.com/problems/word-ladder-ii/ 参考文献:http://blog.csdn.net/doc_sgl/article/details/13341405   http://chaoren.is-programmer.com/ 题意:给定start单词,end单词,以及一个dict字典.要求找出start到end的所有最短路径,路径上的每个单词都要出现在dict

LeetCode &quot;Word Ladder&quot; - TRICKY

It is not as easy as I thought it to be, mostly because of time\space limitation. And actually that's the punch line of this problem My intuition was DFS. I got several failing attemption - all TLE or MLE. Since what we are supposed to find is 'short

leetcode Word Ladder II

和上题 Word Ladder I题目差不多,不过这里是要记录所有最段路径的可能. 不同点在于,我们不能再BFS每层的时候把相距一个字符的字符串在dict中删除,因为hot -> hit 的话其他的例如 jit -> hit 就是hit可以出现在两条路径里头.所以不能立马删除.但是我们发现我们可以删除的是我们遍历完的每层的字符串,我们用known来存遍历完的层,unknown来存没有遍历的层,那么每次求得下一层unknown的时候,就首先把known里面有的从dic中删除. 主要思路还是和上一

LeetCode Word Ladder 找单词变换梯

题意:给出两个单词,以及一个set集合,当中是很多的单词.unordered_set是无序的集合,也就是说找的序列也是无序的了,是C++11的标准,可能得升级你的编译器版本了.要求找出一个从start到end这两个单词的变换序列.从start开始,每次可以变一个字母,且所变之后的单词必须在set中,最后要求变成end,问经过了多少个中间变换?注意要加多2次(start和end也要算),这是规定. 思路:广度搜索,以start为树根,一层一层扩展,直到找到end,返回数的深度即可.步骤是这样的,先

[python leetcode] Word Ladder II (very hard)[非常难,放弃]

Word Ladder II 描述 Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) from start to end, such that: • Only one letter can be changed at a time • Each intermediate word must exist in the dictionary For examp

[LeetCode]Word Ladder 最短距离字符串转换 (Dijkstra)

要求最短距离.采纳dijkstra查找节点之间的最短路径. 当心:假设是一个枚举字典22是否元素可以,如果转换,暂停. 提高:每串,带您历数它的字符值事件,对于的长度n一个字符串枚举n*26次要. 设仅仅是简单的枚举,则会出现重边: 如abc,bbc,cbc,建图后每两个节点间均有两条双向边,这对于邻接表存储的图会存在非常多冗余边. 解决方法:每一个节点每位字符仅仅能从原始字符往后枚举,即 枚举各字符串第一位的话 abc:bbc,cbc,dbc,... bbc:cbc,dbc,... cbc:d

leetcode&mdash;&mdash;Word Ladder

    好多天没写leetcode了,就是卡在这题上,然后各种偷懒....之前思路一直没理顺,想了两个晚上,就放弃了,后来就去看答案去了...可是答案没有注释,有点看不太懂,后来只好上网查了,有的说用到trie树,就去看了trie树是啥...反正那段时间状态不好,总不想看,偶尔还被跑男吸引注意力,总之各种偷懒,到了今天终于看完答案了,试着结合各方答案写了一下..调了2个小时,终于通过了...而且效率也不高...但不管怎样,终于做出来了...但是不知道为什么这么做能保证每个单词的步骤数得出来的是最

Leetcode:Word Break 字符串分解为单词

Word Break Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words. For example, given s = "leetcode", dict = ["leet", "code"]. Return t