给一个单词s,和一个字符串集合str。这个单词每次去掉一个字母,直到剩下最后一个字母。求验证是否存在一种删除的顺序,这个顺序下所有的单词都在str中。例如单词是’abc’,字符串集合是{‘a’,’ab’,’abc’},如果删除的顺序是’c’,’b’,那么’abc’,’ab’,’a’都在集合中,就符合条件。输出这个组合是否符合条件.

  • 1<=|str[i]|,|s|<=30
  • 1<=str中字符串的个数<=100

在线评测地址:https://www.lintcode.com/problem/checkwords/?utm_source=sc-bky-zq

样例 1:

输入:s="abc",str=["abc","ac","c"]
输出:true
解释:
首先"abc"在`str`里
删除'b',"ac"在`str`里
删除'a',"c"在`str`里

样例 2:

输入:s="abc",str=["abc","ab","c"]
输出:false
解释:
"abc"在`str`里
接下来只能删除'c',"ab"在`str`里
由于"a"和"b"都不在`str`里,所以返回false

【题解】

考点:

dfs

  • 按照题目要求,首先保证原串存在于str中。
  • 每次拼接字符串,正好删去一个字符继续搜索。
  • 直至当前字符串长度为1返回为true。
  • 使用TreeSet标记,除去重复字符串。
public class Solution {
/**
* @param s:
* @param str:
* @return: Output whether this combination meets the condition
*/
Set<String> map = new TreeSet<String>();
public boolean checkWord(String s, String[] str) {
// Write your code here
if (s.length() > str.length) {
return false;
}
if (s.length() == ) {
return true;
}
return dfs(s, str);
}
public boolean dfs (String s, String[] str) {
int result = ;
for(int i = ; i < str.length; i++) {
if(str[i].equals(s)) {
result = ;
}
}
if (result == ) {
return false;
}
if (s.length() == ) {
return true;
}
//当前的子串要没被访问过的
if (map.contains(s)) {
return false;
}
for (int i = ; i < s.length(); i++) {
//删除一个字母后的下一个子串
String next = s.substring(,i) + s.substring(i + );
if (dfs (next,str)) {
return true;
}
}
//新的子串放入map,为之后子串检查访问情况
map.add(s);
return false;
}
}

更多题解参见:https://www.jiuzhang.com/solution/checkwords/?utm_source=sc-bky-zq

[leetcode/lintcode 题解] Google面试题:合法组合的更多相关文章

  1. [leetcode/lintcode 题解] 微软面试题:股票价格跨度

    编写一个 StockSpanner 类,它收集某些股票的每日报价,并返回该股票当日价格的跨度. 今天股票价格的跨度被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今天). 例如 ...

  2. [leetcode/lintcode 题解] Amazon面试题:连接棒材的最低费用

    为了装修新房,你需要加工一些长度为正整数的棒材 sticks. 如果要将长度分别为 X 和 Y 的两根棒材连接在一起,你需要支付 X + Y 的费用. 由于施工需要,你必须将所有棒材连接成一根. 返回 ...

  3. [leetcode/lintcode 题解] 谷歌面试题:找出有向图中的弱连通分量

    请找出有向图中弱连通分量.图中的每个节点包含 1 个标签和1 个相邻节点列表.(有向图的弱连通分量是任意两点均有有向边相连的极大子图) 将连通分量内的元素升序排列. 在线评测地址:https://ww ...

  4. [leetcode/lintcode 题解] 微软面试题:公平索引

    现在给你两个长度均为N的整数数组 A 和 B. 当(A[0]+...A[K-1]),(A[K]+...+A[N-1]),(B[0]+...+B[K-1]) 和 (B[K]+...+B[N-1])四个和 ...

  5. [leetcode/lintcode 题解] 微软 面试题:实现 Trie(前缀树)

    实现一个 Trie,包含 ​insert​, ​search​, 和 ​startsWith​ 这三个方法.   在线评测地址:领扣题库官网     样例 1: 输入:    insert(" ...

  6. leetcode & lintcode 题解

    刷题备忘录,for bug-free 招行面试题--求无序数组最长连续序列的长度,这里连续指的是值连续--间隔为1,并不是数值的位置连续 问题: 给出一个未排序的整数数组,找出最长的连续元素序列的长度 ...

  7. [leetcode/lintcode 题解] 一致性哈希 II · Consistent Hashing II

    [题目描述] 在 Consistent Hashing I 中我们介绍了一个比较简单的一致性哈希算法,这个简单的版本有两个缺陷: 增加一台机器之后,数据全部从其中一台机器过来,这一台机器的读负载过大, ...

  8. 【LeetCode/LintCode 题解】约瑟夫问题 · Joseph Problem

    n个人按顺序围成一圈(编号为1~n),从第1个人从1开始报数,报到k的人出列,相邻的下个人重新从1开始报数,报到k的人出列,重复这个过程,直到队伍中只有1个人为止,这就是约瑟夫问题.现在给定n和k,你 ...

  9. [leetcode/lintcode 题解] 前序遍历和中序遍历树构造二叉树

    [题目描述] 根据前序遍历和中序遍历树构造二叉树. 在线评测地址: https://www.jiuzhang.com/solution/construct-binary-tree-from-preor ...

随机推荐

  1. 使用 JS 开发 Github Actions 实现自动部署前后台项目到自己服务器

    不想看前面这么多废话的可以直接跳到具体实现 Github Actions 是什么? 说到 Github Actions 不得不提一下. 持续集成(continuous integration):高质量 ...

  2. 【Docker】Redis 安装使用教程

    1.安装 1.1 拉取镜像 docker pull redis redis:4.0 1.2 创建redis容器名"redistest1",并开启持久化 docker run -d ...

  3. 【翻译】Scriban README 文本模板语言和.NET引擎

    scriban Scriban是一种快速.强大.安全和轻量级的文本模板语言和.NET引擎,具有解析liquid模板的兼容模式 Github https://github.com/lunet-io/sc ...

  4. 【博弈论】Road to Arabella Gym - 102263B

    题目: 题目大意:输入n,k.两个人轮流选一个数x(1<=x<=max(1,n-k))减去n,若到一个人的回合n=0那么那个人失败.Kilani先手. 通过手动模拟几个实例,很容易发现先手 ...

  5. java基础知识--数据类型

    计算机时识别不了我们编写的代码语言,计算机中的数据全部采用二进制表示,即0和1表示的数字,每一个0或者1就是一个位,一个位叫做一个bit(比特).(实际上计算机只能识别高低电平,而不是0和1.) 字节 ...

  6. 使用python打造一款音乐播放器

    作者qq:64761294 编程/考试交流群:834531270 欢迎交流 核心播放模块(pygame内核) import time import pygame import easygui as g ...

  7. 附002.Nginx全系列大总结

    Nginx全系列总结如下,后期不定期更新. 欢迎基于学习.交流目的的转载和分享,禁止任何商业盗用,同时希望能带上原文出处,尊重ITer的成果,也是尊重知识. 若发现任何错误或纰漏,留言反馈或右侧添加本 ...

  8. 学习 bypass csp记录

    最近看到一篇bypas csp的记录复现学习下 配置csp 这里直接设置html头达到配置csp的效果. Content-Security-Policy: script-src 'self' 'uns ...

  9. Redis的各种数据类型到底能玩出什么花儿?

    https://mp.weixin.qq.com/s/ZSQ9vCkWXYuLrKS0UJ4RIg 两个星期终于肝了出来,Redis相关问题脑图,终于整理完了!!! 文末无套路分享~~附获取方式 Re ...

  10. 究竟什么时候该使用MQ?

    究竟什么时候该使用MQ? 原创: 58沈剑 架构师之路  昨天 任何脱离业务的组件引入都是耍流氓.引入一个组件,最先该解答的问题是,此组件解决什么问题. MQ,互联网技术体系中一个常见组件,究竟什么时 ...