写点什么

LeetCode1160--- 拼写单词 ---Easy

用户头像
书旅
关注
发布于: 2020 年 08 月 24 日
LeetCode1160---拼写单词---Easy

题目:拼写单词

题干:给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串)chars。假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词

注意:每次拼写(指拼写词汇表中的一个单词)时,chars 中的每个字母都只能用一次。

返回词汇表 words 中你掌握的所有单词的 长度之和

示例 1
输入:words = ["cat","bt","hat","tree"], chars = "atach"
输出:6
解释:可以形成字符串 "cat""hat",所以答案是 3 + 3 = 6

思路:

  • 题目比较简单,其实核心就是根据给出的字符串,能否组成某一个单词

  • 首先计算出给定的字母表中,每一个字符的个数,可以先将字符串转成数组,然后就可以使用arraycountvalues()统计出每一个字符的个数

  • 遍历给定的单词数组,相同的方法统计每一个单词中各个字符的个数

  • 获取单词中每一个字符的数量,分别和给定的字符串中该字符的数量进行比较,如果存在单词中的某个字符大于给定的字符串中该字符的数量,则该单词排除,否则该单词就是合法的

代码实现(语言:PHP)

<?php
class Solution {
/**
* 题号:1160
* @param String[] $words
* @param String $chars
* @return Integer
*/
function countCharacters($words, $chars) {
$charsMap = $this->charCount($chars);
$totalLen = 0;
foreach ($words as $item) {
$wordMap = $this->charCount($item);
$keys = array_keys($wordMap);
$flag = true;
for ($i=0; $i < count($keys);$i++) {
$charValue = $charsMap[$keys[$i]] ?? 0;
if ($charValue < $wordMap[$keys[$i]]) {
$flag = false;
}
}
if ($flag === true) {
$totalLen += strlen($item);
}
}
return $totalLen;
}
public function charCount($str) {
$strArr = str_split($str);
$strMap = array_count_values($strArr);
return $strMap;
}
}



发布于: 2020 年 08 月 24 日阅读数: 47
用户头像

书旅

关注

公众号:IT猿圈 2019.04.11 加入

还未添加个人简介

评论

发布
暂无评论
LeetCode1160---拼写单词---Easy