Leetcode79. Word Search-dfs

Leetcode79. Word Search

完成Leetcode212. Word Search II后,简化版的Leetcode79. Word Search改写一下程序就可以完成

题目

题目链接

思路

对board中的每个字母,进行dfs遍历,检查是否与word match
也可以沿用Leetcode212. Word Search II的思路,将单个单词建成Trie,这样比较通用

复杂度

设词的长度为L,board有M行N列

  • 时间复杂度 O ( n ) \mathcal{O}(n) O(n)
    最坏情况,board中的每个字母,向四个方向都能不停的匹配下去,直到达到单词长度,如单词为aaaaaa,board中字母也全是a,则时间复杂度为 O ( 4 ∗ L ∗ M ∗ N ) = O ( L ∗ M ∗ N ) \mathcal{O}(4*L*M*N)=\mathcal{O}(L*M*N) O(4LMN)=O(LMN)
    最好情况,board中的每个字母,都没有匹配到起点, O ( M ∗ N ) \mathcal{O}(M*N) O(MN)

  • 空间复杂度 O ( M ∗ N ) \mathcal{O}(M*N) O(MN)
    board占用 O ( M ∗ N ) \mathcal{O}(M*N) O(MN)

代码

class Solution:
    def exist(self, board, word: str) -> bool:
        if not board or not word:
            return False

        m = len(board)
        n = len(board[0])
        self.match = False

        def search(index, i, j):
            c = board[i][j]
            w = word[index]
            if not c == w:  # 不匹配
                return
            if c == w and index == len(word) - 1:  # 说明word匹配完毕
                self.match = True
                return
            board[i][j] = ''  # 防止从o访问到a后,又回头访问o

            # 向四个方向搜索
            if i > 0:
                search(index + 1, i - 1, j)
            if j > 0:
                search(index + 1, i, j - 1)
            if i < m - 1:
                search(index + 1, i + 1, j)
            if j < n - 1:
                search(index + 1, i, j + 1)
            board[i][j] = c

        for i in range(m):
            for j in range(n):
                search(0, i, j)

        return self.match
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值