class Solution { public int countCharacters(String[] words, String chars) { int[] charsOfCase = new int[26];//统计字符表中的字符 int count = 0;//单词长度之和 for(char c : chars.toCharArray()){//统计字符表中的字符 charsOfCase[c-'a']++; } for(String str : words){ int[] temp = new int[26]; boolean flag = true; for(char c : str.toCharArray()){//存储统计词汇表中单词的字符 temp[c-'a']++; } for(int i = 0; i < charsOfCase.length; i++){//对比两个统计数据 if(temp[i] > charsOfCase[i]){ flag = false; break; } } if(flag) count += str.length(); } return count; } }
这种执行效率不高
我们可以把字母表中的长度与词汇表中每一个词汇的长度对比放在存储统计词汇表中单词的字符前面,这样子可以减少一些比较,缩短了执行时间
class Solution { public int countCharacters(String[] words, String chars) { int len = 0; char[] cs = new char[26]; for (char c : chars.toCharArray()) { cs[c - 'a']++; } for (String str : words) { boolean flag = true; //如果长度大于chars数组,直接不用比较 if (chars.length() < str.length()) { flag = false; } else { char[] temp = new char[26]; for (char t : str.toCharArray()) { temp[t - 'a']++; if(temp[t - 'a'] > cs[t - 'a']) { flag = false; break; } } } if (flag) { len += str.length(); } } return len; } }