博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode-WordLadder
阅读量:5930 次
发布时间:2019-06-19

本文共 2477 字,大约阅读时间需要 8 分钟。

题目:

Given two words (beginWord and endWord), and a dictionary's word list, find the length of shortest transformation sequence from beginWord to endWord, such that:

Only one letter can be changed at a time

Each intermediate word must exist in the word list
For example,

Given:

beginWord = "hit"endWord = "cog"wordList = ["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.

由于只需要求最短的距离,所以直接BFS就行了。这题OJ的数据卡得比较严,裸BFS会TLE。没有必要写双向的BFS,注意下剪枝就可以了。直接放代码。

code:

import java.util.*;public class WordLadder {    public int ladderLength(String beginWord, String endWord, Set
wordList) { HashMap
map = new HashMap
(); LinkedList
queue = new LinkedList
(); queue.offer(beginWord); map.put(beginWord, 1); boolean flag = false; while(!queue.isEmpty()){ String curr = queue.poll(); for(String next : getNextWords(curr, wordList)){ if(next.equals(endWord)){ flag = true; map.put(next, map.get(curr) + 1); System.out.println(next + " " + map.get(next)); return map.get(next); } if(wordList.contains(next)){ if(!map.containsKey(next)){ map.put(next, map.get(curr) + 1); System.out.println(next + " " + map.get(next)); queue.offer(next); } } } } if(flag) return map.get(endWord); else return 0; } public List
getNextWords(String word, Set
wordList){ List
nextWords = new ArrayList
(); for(int i = 0; i < word.length(); i++){ for(char c = 'a'; c <= 'z'; c++){ if(c == word.charAt(i)) continue; char[] arr = word.toCharArray(); arr[i] = c; String next = new String(arr); if(wordList.contains(next)) nextWords.add(next); } } return nextWords; } public static void main(String[] args){ WordLadder WL = new WordLadder(); Set
wordList = new HashSet
(); wordList.add("a"); wordList.add("b"); wordList.add("c"); String beginWord = "a"; String endWord = "c"; int result = WL.ladderLength(beginWord, endWord, wordList); System.out.println(result); }}

转载地址:http://qtutx.baihongyu.com/

你可能感兴趣的文章
德国慕尼黑政府花巨资用 Linux 代替 Windows XP/2000
查看>>
2016年里做前端是怎样一种体验
查看>>
多字段,任意组合条件查询(0建模) - 毫秒级实时圈人 实践
查看>>
《MapReduce 2.0源码分析与编程实战》一1.1 大数据时代
查看>>
《机器学习与数据科学(基于R的统计学习方法)》——2.5 读取CSV文件
查看>>
Ceph分布式存储实战 1.1 Ceph概述
查看>>
RHCSA 系列(三): 如何管理 RHEL7 的用户和组
查看>>
《Arduino家居安全系统构建实战》——1.6 改进我们的模型
查看>>
在 Kali Linux 下实战 Nmap(网络安全扫描器)
查看>>
Java集合-Iterable
查看>>
互联网诊疗管理来了:有法可依 现有格局或受影响
查看>>
演讲实录丨朱频频 让Bots无处不在
查看>>
【Nature封面文章】大脑词汇地图
查看>>
《面向对象设计实践指南:Ruby语言描述》—第8章 8.4节组合成Bicycle
查看>>
Activiti实战. 2.1 下载Activiti
查看>>
安装Ubuntu 14.04后要做的5件事情
查看>>
《jQuery Cookbook中文版》——导读
查看>>
《C++面向对象高效编程(第2版)》——4.3 C++中的无用单元收集
查看>>
《Nmap渗透测试指南》—第10章10.9节新建扫描模板
查看>>
2017 OpenStack峰会:k8S抢尽风头?
查看>>