Leetcode.1160。単語をスペル

タイトル

あなたの「用語集」(文字列の配列)言葉と「アルファベット」(文字列)文字を付けます。

あなたは「単語」「手紙」の文字と(文字列)(文字)で単語を綴ることができるなら、我々はあなたが言葉を習得したと思います。

注:たびスペリングは、各文字は一度だけ使用することができます文字。

あなたは長さの合計をマスターしているすべての単語に語彙を返します。

 

例1:

入力:言葉= [「猫」、 「BT」、「帽子」、「木」]、文字=「atach」
出力:6
説明: 
答えは3 + 3であるので、文字列「猫」と「帽子」を形成することができます= 6。
例2:

入力:言葉= [ "こんにちは"、 "世界"、 "leetcode"]、文字= "welldonehoneyr"
出力:10
説明:
答えは5 + 5 = 10であるので、文字列"こんにちは"と"世界"を形成することができます。

思考

アルファベットのすべての文字でのCのサブセットでなければならないwは考え対応するアルファベットの文字、およびハッシュ表C対応する周波数を記録し、ハッシュ・テーブルは、その後さらに、対応する単語wの文字の単語、及び周波数番号を記録している、および周波数が超えることができない場合、単語は文字で表すことができる唯一の単語です。改善:コメントの領域に記録する方法の配列を使用することができ、それがBiha Xiのテーブルが速くなりますが、同じ考え方を確認します。次のことを達成するために:

class Solution {
public:
    int countCharacters(vector<string>& words, string chars) {
        if(words.empty()||chars.empty())
            return 0;

        unordered_map<char, int> c;
        for(int i=0 ; i<chars.size(); i++){
            char t=chars[i];
            c.find(t)==c.end()?c[t]=1:c[t]++;
        }

        int ans=0;
        for(int i=0; i<words.size(); i++){
            unordered_map<char, int> w;
            int j=0;
            for(; j<words[i].size(); j++){
                char t=words[i][j];
                if(c.find(t)==c.end())
                    break;
                w.find(t)==w.end()?w[t]=1:w[t]++;
                if(w[t]>c[t])
                    break;
            }
            if(j==words[i].size())
                ans+=words[i].size();
        }
        return ans;
    }
};

 

公開された18元の記事 ウォンの賞賛0 ビュー783

おすすめ

転載: blog.csdn.net/afiguresomething/article/details/104927413