vlambda博客
学习文章列表

一道基数排序的简单题目


题目描述

难度:简单
题目描述:给你一份单词表words(字符串数组)和一个字符序列strs(字符串)
假如你可以用strs拼写出words中的某个单词,那么就可以认为你掌握了这个单词。假设字母都是小写,请返回words中你能够掌握的所有单词的长度。
注意:字符序列里的字符只能用一次

参考代码

/**
 * Created by Lingluo on 2020/7/5.
 * 难度:简单
 * 题目描述:给你一份单词表words(字符串数组)和一个字符序列strs(字符串)
 * 假如你可以用strs拼写出words中的某个单词,那么就可以认为你掌握了这个单词。
 * 请返回words中你能够掌握的所有单词的长度。
 * 注意:字符序列里的字符只能用一次
 */

public class WordsSolution2 {
    public static int getLength(String[] words, String str) {
        int length = 0;
        char[] source = new char[26];

        for (int i = 0; i < str.length(); i++) {
            char[] ch = str.toCharArray();
            int index = ch[i] - 'a';
            source[index]++;
        }

        for (String word : words) {
            boolean flag = true;
            char[] target = new char[26];
            char[] ch = word.toCharArray();
            for (int i = 0; i < word.length(); i++) {
                int index = ch[i] - 'a';
                target[index]++;
            }

            for (int i = 0; i < word.length(); i++) {
                int index = ch[i] - 'a';
                if (source[index] < target[index]) {
                    flag = false;
                }
            }

            if (flag) {
                length += word.length();
            }
        }
        return length;
    }

    public static void main(String[] args) {
        String[] words = {"cat""bt""hat""tree"};
        String str = "atach";

        System.out.println(getLength(words, str)); // 6

        String[] words2 = {"hello""hhello""world""leetcode"};
        String str2 = "welldonehoneyr";
        System.out.println(getLength(words2, str2)); // 10
    }
}

视频讲解