JAVA进步一点点--数据结构与算法(广搜)--单词拆分

139. 单词拆分

在这里插入图片描述
暴力法:
https://leetcode-cn.com/problems/word-break/solution/zi-fu-chuan-sou-suo-wen-ti-bfshe-dfshui-shi-bi-jia/ 大神的题解抄袭一遍
https://leetcode-cn.com/problems/word-break/solution/shou-hui-tu-jie-san-chong-fang-fa-dfs-bfs-dong-tai/ 大神画图讲解
大神不要怪我偷个图,
在这里插入图片描述
广搜就是层序,

	public boolean wordBreak(String s, List<String> wordDict) {
		if (s == null || s.length() == 0 || wordDict == null || wordDict.size() == 0) {
			return false;
		}
		//用于剪枝,保存已经不能组成的字符串
		Set<String> visited = new HashSet<>();
		//层序遍历的队列
		Queue<String> queue = new ArrayDeque<>();
		//根是原字符
		queue.add(s);
		while (!queue.isEmpty()) {
			String cur = queue.poll();
			//把所有可以用字典中打头的剩余字符存起来,继续寻找
			for (String word : wordDict) {
				//当前字符是否可以用word中的字符打头
				if (cur.indexOf(word) == 0) {
					//剩余字符继续查找
					String leftStr = cur.substring(word.length());
					if (leftStr.equals("")) {
						return true;
					}
					//保证已经寻找过的字符串不在寻找,这里存的都是无法组成的,如果能组成,就在第一次寻找的时候return true了
					if (visited.contains(leftStr)) {
						continue;
					}
					queue.add(leftStr);
					visited.add(leftStr);
				}
			}
		}
		return false;

	}

此题的深搜和递归及其相似
就是str如果可以以dic开头,就找剩下的是否可以以dic开头到最后
f(str)=word->dic+f(str - word)

	Set<String> visited1 = new HashSet<>();

	public boolean wordBreak1(String s, List<String> wordDict) {
		if (s == null || s.length() == 0 || wordDict == null || wordDict.size() == 0) {
			return false;
		}
		for (String word : wordDict) {
			if (s.indexOf(word) == 0) {
				if (s.equals(word)) {
					return true;
				}
				if (visited1.contains(s.substring(word.length()))) {
					continue;
				}
				visited1.add(s.substring(word.length()));
				if (wordBreak1(s.substring(word.length()), wordDict)) {
					return true;
				}
			}
		}
		return false;
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值