[leetcode127]Word Ladder Problem
2015-09-18 23:16
447 查看
Word Ladder Problem
问题描述: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。
只求路径长度,不需要具体路径。即要求遍历层数,用变量level标记层数,遇到终点返回层数level即可。
from collections import deque class Solution(object): def ladderLength(self, beginWord, endWord, wordDict): """ :type beginWord: str :type endWord: str :type wordDict: Set[str] :rtype: int """ level = 1 que = deque() visited = set() wordDict.add(endWord) que.append((beginWord, level)) # state is represented by (str, level depth) while que: curStr, curLevel = que.popleft() curLevel += 1 for sucsr in self.successor(curStr, wordDict): if sucsr == endWord: return curLevel if sucsr not in visited: visited.add(sucsr) wordDict.remove(sucsr) que.append((sucsr,curLevel)) return 0 def successor(self, curStr, wordDict): succss = [] curList = list(curStr) for idx in range(len(curStr)): for ele in 'abcdefghijklmnopqrstuvwxyz': temp = curList[idx] curList[idx] = ele newStr = ''.join(curList) curList[idx] = temp if newStr in wordDict: succss.append(newStr) return succss solution = Solution() wordSet = set(["hot","dot","dog","lot","log"]) start = 'hit' end = 'cog' print(solution.ladderLength(start,end,wordSet)) 5
相关文章推荐
- String,StringBuffer,StringBuilder
- 基于bootstrap的简单分页
- 缅怀
- 分享一个Swift语言的逆波兰表达式计算器的实现
- Java并发编程:如何创建线程
- select ... for update& lock in share mode加锁情况
- 按哪个穴位能防脱发
- raspberry pi2 智能小车源码及测试视频
- java 数组声明方法
- raspberry pi2 智能小车源码及测试视频
- Android 状态栏沉浸式的实现
- HDU_3998_Sequence(最长上升子序列 + 网络流)
- poj 2001(trie)
- android 禁止listview 的ITEM被点击
- 华为面试题 输入一个n,在屏幕上输出N*N的矩阵
- sql Server分页查询
- java怎么建立JAVA工程项目?
- java怎么建立JAVA工程项目?
- 数组和集合拾遗
- golang一个深复制的库