题目:拼写单词
给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。
假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。
注意:每次拼写时,chars 中的每个字母都只能用一次。
返回词汇表 words 中你掌握的所有单词的 长度之和。
示例 1:
输入:words = ["cat","bt","hat","tree"], chars = "atach"
输出:6
解释:
可以形成字符串 "cat" 和 "hat",所以答案是 3 + 3 = 6。
示例 2:
输入:words = ["hello","world","leetcode"], chars = "welldonehoneyr"
输出:10
解释:
可以形成字符串 "hello" 和 "world",所以答案是 5 + 5 = 10。
提示:
1 <= words.length <= 1000
1 <= words[i].length, chars.length <= 100
所有字符串中都仅包含小写英文字母
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-words-that-can-be-formed-by-characters。
此题是让乱序的字符与有序单词比较,很明显常用的字符串比较方法是无法使用的,最好的方式,就是进行字符的计数进行比较。
class Solution {
public int countCharacters ( String[ ] words, String chars) {
int [ ] hash = new int [ 26 ] ;
for ( char ch : chars. toCharArray ( ) ) {
hash[ ch - 'a' ] ++ ;
}
int [ ] map = new int [ 26 ] ;
int length = 0 ;
for ( String word : words) {
Arrays. fill ( map, 0 ) ;
boolean flag = true ;
for ( char c : word. toCharArray ( ) ) {
map[ c - 'a' ] ++ ;
if ( map[ c - 'a' ] > hash[ c - 'a' ] ) {
flag = false ;
}
}
length += flag ? word. length ( ) : 0 ;
}
return length;
}
}