タイトル説明
あなたの「用語集」(文字列の配列)言葉と「アルファベット」(文字列)文字を付けます。
あなたは「単語」「手紙」の文字と(文字列)(文字)で単語を綴ることができるなら、我々はあなたが言葉を習得したと思います。
注:たびスペリングは、各文字は一度だけ使用することができます文字。
あなたは長さの合計をマスターしているすべての単語に語彙を返します。
例1:
入力:言葉= [「猫」、 「BT」、「帽子」、「木」]、文字=「atach」
出力:6
説明:
答えは3 + 3であるので、文字列「猫」と「帽子」を形成することができます= 6。
例2:
入力:言葉= [ "こんにちは"、 "世界"、 "leetcode"]、文字= "welldonehoneyr"
出力:10
説明:
答えは5 + 5 = 10であるので、文字列"こんにちは"と"世界"を形成することができます。
ヒント:
1 <= words.length <= 1000
。1 <=ワード[I] .LENGTH、chars.length <= 100
すべての文字列は、小文字であります
問題解決のためのアイデア
tmpMapとして、次のコードに示すように、それぞれの文字内部ハッシュマップの文字を維持することによって
以下のために(INT ; I <chars.length(); iが0 = I ++ ){
場合(tmpMap.get(chars.charAt(I))== NULL ){
tmpMap.put(chars.charAt(I)、 1 )。
} 他{
tmpMap.put(chars.charAt(I)、tmpMap.get(chars.charAt(I)) +1 )。
}
}
各トラバースした後、文字列配列に起因して、マップは初期tmpMapに更新する必要があり、考慮の別のHashMapのHashMapに割り当てられた課題を取ることが必要です
次に、マップを==使用tmpMapできない、実際に初期tmpMap維持することができない同じアドレスをポイントし、そのようなマップが変更されているように、tmpMapも続いて変化があるので
1。勧告クローン()メソッドは、新しいtestMapを作成し、
2.マップのいずれかを操作して、第2のマップへの道を横断することにより、割り当ての最初のマップの値が、
他のマップは変更されません。
3.のputAllを割り当てる方法は、本質的に、方法2です。
コードは以下の通りです
package leetcode;
import java.util.HashMap;
import java.util.Map;
public class CountCharacters {
public int countCharacters(String[] words, String chars) {
if (words.length==0||chars==null) {
return 0;
}
Map<Character, Integer> tmpMap=new HashMap<Character, Integer>();
for (int i = 0; i < chars.length(); i++) {
if (tmpMap.get(chars.charAt(i))==null) {
tmpMap.put(chars.charAt(i), 1);
}else {
tmpMap.put(chars.charAt(i), tmpMap.get(chars.charAt(i))+1);
}
}
Map<Character, Integer> map=new HashMap<Character,Integer>();
//这里是不能用map==tmpMap的
map.putAll(tmpMap);
int sumLength=0;
for (int i = 0; i < words.length; i++) {
boolean flag=true;
for (int j = 0; j < words[i].length(); j++) {
if (map.get(words[i].charAt(j))==null) {
flag=false;
}else if(map.get(words[i].charAt(j))==0){
flag=false;
}else {
map.put(words[i].charAt(j), map.get(words[i].charAt(j))-1);
}
}
//这里是不能用map==tmpMap的
map.putAll(tmpMap);
if (flag) {
sumLength+=words[i].length();
}
}
return sumLength;
}
public static void main(String[] args) {
CountCharacters characters=new CountCharacters();
System.out.println(characters.countCharacters(new String[] {"cat","bt","hat","tree"}, "atach"));
}
}