Word Ladder -- LeetCode
public int ladderLength(String start, String end, HashSet dict) {
if(start==null || end==null || start.length()==0 || end.length()==0 || start.length()!=end.length())
return 0;
LinkedList queue = new LinkedList();
HashSet visited = new HashSet();
int level= 1;
int lastNum = 1; // 当前level还需要check的节点
int curNum = 0; // next level 需要check的节点
queue.offer(start);
visited.add(start);
while(!queue.isEmpty())
{
String cur = queue.poll(); //从queue拿出一个进行visit
lastNum--;
for(int i=0;i<cur.length();i++)
{
char[] charCur = cur.toCharArray();
for(char c='a';c<='z';c++)
{
charCur[i] = c;
String temp = new String(charCur);
if(temp.equals(end))
return level+1;
if(dict.contains(temp) && !visited.contains(temp))
{
curNum++;//新的未visit的节点,
queue.offer(temp); // 加到下次check的行列
visited.add(temp); //标记为visited
}
}
}
//当前level已经check完成,进行下一个level
if(lastNum==0)
{
lastNum = curNum;
curNum = 0;
level++;
}
}
return 0;
}
没有评论:
发表评论