[LeeCode] 127. Word Ladder (Python)

127. Word Ladder

Medium

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:

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

Note:

  • Return 0 if there is no such transformation sequence.
  • All words have the same length.
  • All words contain only lowercase alphabetic characters.
  • You may assume no duplicates in the word list.
  • You may assume beginWord and endWord are non-empty and are not the same.

Example 1:

Input:
beginWord = "hit",
endWord = "cog",
wordList = ["hot","dot","dog","lot","log","cog"]

Output: 5

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

Example 2:

Input:
beginWord = "hit"
endWord = "cog"
wordList = ["hot","dot","dog","lot","log"]

Output: 0

Explanation: The endWord "cog" is not in wordList, therefore no possible transformation.

 

笔记:

利用BFS去解决。通过替换一个单词中的字母去判断该单词是否在wordList中。

当只是查询某个值是否在一个变量里面的时候,set/dict 比List更高效,set/dict的查询是O(1), list是O(n).

按索引查询,list的效率是O(1),set的是O(n)。

list在头部插入或者删除的时候,效率是O(n)

deque双端队列,在两段插入或者删除的效率都是O(1), deque不要使用切片(会抛出异常)和索引(效率为O(n))。deque的双端索引效率是O(1), 但是任意位置访问的话,效率是O(n),所以当需要索引访问的时候,使用list

class Solution:
    def ladderLength(self, beginWord: str, endWord: str, wordList: List[str]) -> int:
        word_set = set(wordList)
        if endWord not in word_set:
            return 0
        que = collections.deque()
        que.append((beginWord,1))
        while que:
            word, step = que.popleft()
            for i in (range(len(word))):
                for s in 'abcdefghijklmnopqrstuvwxyz':
                    new_word = word[:i] + s + word[i + 1:]
                    if new_word in word_set and new_word != word:
                        if new_word == endWord:
                            return step + 1
                        que.append((new_word, step + 1))
                        word_set.remove(new_word)
        return 0

 

 

参考:https://blog.csdn.net/fuxuemingzhu/article/details/82903681

            https://www.cnblogs.com/grandyang/p/4539768.html

            https://zhuanlan.zhihu.com/p/32201189

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我理解了你的问题。首先,我们需要创建三个JSP页面,分别是main.jsp、circle.jsp和ladder.jsp。下面是这三个页面的代码实现: main.jsp ``` <html> <head> <title>Main Page</title> </head> <body> <h1>Main Page</h1> <jsp:include page="circle.jsp"> <jsp:param name="radius" value="5"/> </jsp:include> <br> <jsp:include page="ladder.jsp"> <jsp:param name="upper" value="10"/> <jsp:param name="lower" value="15"/> <jsp:param name="height" value="8"/> </jsp:include> </body> </html> ``` circle.jsp ``` <%@ page language="java" %> <%@ page import="java.text.DecimalFormat" %> <% double radius = Double.parseDouble(request.getParameter("radius")); double area = Math.PI * radius * radius; DecimalFormat df = new DecimalFormat("#.##"); %> <h2>Circle Area Calculation</h2> <p>Radius: <%=radius%></p> <p>Area: <%=df.format(area)%></p> ``` ladder.jsp ``` <%@ page language="java" %> <%@ page import="java.text.DecimalFormat" %> <% double upper = Double.parseDouble(request.getParameter("upper")); double lower = Double.parseDouble(request.getParameter("lower")); double height = Double.parseDouble(request.getParameter("height")); double area = (upper + lower) * height / 2; DecimalFormat df = new DecimalFormat("#.##"); %> <h2>Ladder Area Calculation</h2> <p>Upper base: <%=upper%></p> <p>Lower base: <%=lower%></p> <p>Height: <%=height%></p> <p>Area: <%=df.format(area)%></p> ``` 在这三个页面中,我们使用了JSP中的include动作标记,来加载circle.jsp和ladder.jsp页面,并且通过param子标记提供了圆的半径以及梯形的上底、下底和高的值。在circle.jsp和ladder.jsp页面中,我们通过request.getParameter()方法获取了这些值,并计算了圆和梯形的面积。最后,我们使用DecimalFormat类对面积进行格式化,并将其显示在页面上。 请注意,这些页面应该保存在同一Web服务目录中,并且可以通过浏览器访问main.jsp页面来查看结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值