[79]单词搜索

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

func exist(board [][]byte, word string) bool {
	m := len(board)
	n := len(board[0])
	var def func(index1, index2 int, index int) bool
	def = func(index1, index2 int, index int) bool {
		if index1 < 0 || index2 < 0 || index1 >= m || index2 >= n || board[index1][index2] != word[index] {
			return false
		}
		if index == len(word)-1 {
			return true
		}

		//避免重复匹配同一位置的字符
		temp := board[index1][index2]
		board[index1][index2] = 0

		res := def(index1+1, index2, index+1) || def(index1, index2+1, index+1) || def(index1-1, index2, index+1) || def(index1, index2-1, index+1)
		board[index1][index2] = temp
		return res
	}

	//遍历寻找启起始位置
	for i := 0; i < m; i++ {
		for j := 0; j < n; j++ {
			if def(i, j, 0) {
				return true
			}
		}
	}
	return false
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值