79. Word Search

题意:

在一个二维数组中是否可以匹配到一个字符串,这个字符串在二维数组中可以拐弯,但必须连续。

思路:深搜+回溯

遍历数组,若数组中元素等于字符串第一个字符进入深搜。
深搜中有一个参数k,表示已经匹配的字符数,若k==word.size(),则表示字符串完全匹配成功。
有一个二维数组参数flag,flag[i][j]表示i j位置是否已经被划入匹配范围,若flag[i][j]=0,则表示已匹配,后面不能再使用这个字符。
在每次dfs开始时需将对应位置置0,然后在结束时需要将对应位置置1.

bool dfs(vector<vector<char>>& board, string &word, vector<vector<bool>> &flag, int i, int j, int k) {//91%
	//cout << k << " " << i << " " << j << endl;
	if (k == word.size())
		return true;
	flag[i][j] = 0;
	if (i > 0 && flag[i - 1][j] && board[i - 1][j] == word[k] && dfs(board, word, flag, i - 1, j, k + 1))
		return true;
	if (j > 0 && flag[i][j - 1] && board[i][j - 1] == word[k] && dfs(board, word, flag, i, j - 1, k + 1))
		return true;
	if (i < board.size() - 1 && flag[i + 1][j] && board[i + 1][j] == word[k] && dfs(board, word, flag, i + 1, j, k + 1))
		return true;
	if (j < board[0].size() - 1 && flag[i][j + 1] && board[i][j + 1] == word[k] && dfs(board, word, flag, i, j + 1, k + 1))
		return true;
	flag[i][j] = 1;
	return false;
}

bool exist(vector<vector<char>>& board, string word) {
	int m = board.size(), n = board[0].size(), sz = word.size();
	vector<vector<bool>> flag(m, vector<bool>(n, 1));
	for (int i = 0; i < m; ++i)
		for (int j = 0; j < n; ++j)
			if (board[i][j] == word[0] && dfs(board, word,flag, i, j, 1))
				return true;
	return false;
}
全部评论

相关推荐

03-29 14:19
门头沟学院 Java
你背过凌晨4点的八股文么:加油同学,人生的容错率很高,只是一个暑期罢了,后面还有很多机会!
点赞 评论 收藏
分享
吐泡泡的咸鱼:我也工作了几年了,也陆陆续续面试过不少人,就简历来说,第一眼学历不太够,你只能靠你的实习或者论文或者项目经历,然后你没有论文,没有含金量高的比赛和奖项,只能看实习和项目,实习来说,你写的实习经历完全不清楚你想找什么工作?行研?数据分析?且写的太少了,再看项目,这些项目先不说上过大学读过研究生的都知道很水,然后对你想找的岗位有什么帮助呢?项目和实习也完全不匹配啊,你好像在努力将你所有的经历都放在简历里想表现你的优秀,但是对于你想找的岗位来说,有什么用呢?最后只能获得岗位不匹配的评价。所以你需要明白你想要找的岗位要求是什么,是做什么的,比如产品经理,然后再看你的经历里有什么匹配的上这个岗位,或者对这个岗位以及这个岗位所在的公司有价值,再写到你的简历上
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务