可以输入的最大单词数

186 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第27天,点击查看活动详情

题目描述

键盘出现了一些故障,有些字母键无法正常工作。而键盘上所有其他键都能够正常工作。
给你一个由若干单词组成的字符串 text ,单词间由单个空格组成(不含前导和尾随空格);另有一个字符串 brokenLetters ,由所有已损坏的不同字母键组成,返回你可以使用此键盘完全输入的 text 中单词的数目。
来源:力扣(LeetCode)

  • 示例 1
输入:text = "hello world", brokenLetters = "ad"
输出:1
解释:无法输入 "world" ,因为字母键 'd' 已损坏。
  • 示例 2
输入:text = "leet code", brokenLetters = "lt"
输出:1
解释:无法输入 "leet" ,因为字母键 'l''t' 已损坏。
  • 示例 3
输入: text = "leet code", brokenLetters = "e"
输出: 0
解释: 无法输入任何单词,因为字母键 'e' 已损坏。

提示:

  • 1 <= text.length <= 104
  • 0 <= brokenLetters.length <= 26
  • text 由若干用单个空格分隔的单词组成,且不含任何前导和尾随空格
  • 每个单词仅由小写英文字母组成
  • brokenLetters 由 互不相同 的小写英文字母组成

思路分析

据题意可知,题目给出一段句子字符串text和几个坏掉的键盘字符brokenLetters,问这段话中有几个单词是打不出来的。为啥打不出来呢?键盘的几个键坏了,能在键盘打出这几个字符串来才有鬼。
对于这道题可以暴力解决掉它,我们需要取到text和brokenLetters中的每个字符做对比;将text拆成多个单词,循环这些单词,判断这个单词的每个字符是不是有在brokenLetters中,若是有这个单词就不能完整打出来,否则就可以;只要累计计算单词的数量就可以了。

AC代码

function solution(text, brokenLetters) {
    let newArr = text.split(' ');
    const set = new Set(brokenLetters);
    let total = 0;
    for( let item of newArr) {
        let isHas = false;
        for(let i=0; i<item.length; i++) {
            if(set.has(item[i])) {
                isHas = true;
                break;
            }
        }
        if(!isHas) total++
    }
    console.log(total);
}
let text = "hello world doses lijul", brokenLetters = "ad";
solution(text, brokenLetters)