leetcode JAVA Word Ladder 3.44 难度系数3

来源:互联网 发布:scratch编程怎么下载 编辑:程序博客网 时间:2024/05/21 22:57

Question:

Given two words (start and end), and a dictionary, find the length of shortest transformation sequence from start to end, such that:

  1. Only one letter can be changed at a time
  2. Each intermediate word must exist in the dictionary

For example,

Given:
start = "hit"
end = "cog"
dict = ["hot","dot","dog","lot","log"]

As one shortest transformation is "hit" -> "hot" -> "dot" -> "dog" -> "cog",
return its length 5.

Note:

  • Return 0 if there is no such transformation sequence.
  • All words have the same length.
  • All words contain only lowercase alphabetic characters.
public class Solution { public int ladderLength(String start, String end, HashSet<String> dict) {int path = 0;Queue<String> queue = new LinkedList<String>();queue.offer(start);HashSet<String> hs = new HashSet<>();hs.add(start);int length1 = 1;int length2 = 0;while(!queue.isEmpty()){String s = queue.poll();length1--;HashSet<String> hsstr = nextStr(s,dict,hs);length2 +=hsstr.size();for(String str:hsstr){if(str.equals(end)){return path+2;}else{queue.offer(str);}}if(length1==0){path++;length1=length2;length2 = 0;}}return 0;}private HashSet<String> nextStr(String s, HashSet<String> dict,HashSet<String> hs) {HashSet<String> hsstr = new HashSet<>();for(int i=0;i<s.length();i++){StringBuffer sb = new StringBuffer(s);for(char c='a';c<='z';c++){sb.setCharAt(i,c);String temp = sb.toString();if(dict.contains(temp)&&!hs.contains(temp)){hs.add(temp);hsstr.add(temp);}}}return hsstr;}}


0 0