Javaで反復以上の2つの地図

MooDoesCow:

CodeSignalからcommonCharacterCountを行います。もちろん、共通しているどのように多くの文字見てみたいです。

ここでは例を示します。

ためs1 = "aabcc"s2 = "adcaa"、出力がなければならないcommonCharacterCount(s1, s2)= 3。

2 "" sおよび1 "C" - 文字列は3つの、共通の文字を持っています。

それぞれの文字の数とマップの構築についてThougth。それから私は、マップ内のすべての値をチェックし、それらの両方をチェックしたいです。その答えに私は両方のマップでの文字の最小数を追加します。例えば、s1 = "aabcc"&& s2 = "adcaa"mapS1['a'] = 2&& mapS2['a'] = 3、そうcount += min(2,3)= 2

それは私の考えですが、私は述べたように、両方の地図を反復して、いくつかの問題を抱えて。

カウント値としてマップの値を使用して初めて。それは、マップ内の値をインクリメントするための最良の方法だ場合、私は、私はそれで助けを必要と同様になると思うので、本当に、言うことができません。

前もって感謝します :)

static int res(String s1, String s2) {
                HashMap<Character, Integer> mapS1 = new HashMap<>();
                HashMap<Character, Integer> mapS2 = new HashMap<>();
                int count = 0;

                for(int i = 0; i < s1.length(); i++) 
                        mapS1.put(s1.charAt(i), mapS1.getOrDefault(s2.charAt(i), 0) + 1);

                for(int i = 0; i < s2.length(); i++) 
                        mapS1.put(s2.charAt(i), mapS2.getOrDefault(s2.charAt(i), 0) + 1);

                for(Map.Entry<Character, Integer> entry : mapS1.entrySet()) {
                        int a = mapS1.get(entry.getKey());
                        int b = mapS2.get(entry.getKey());

                        if(a > 0 && b >= 0) count += Math.min(a, b);
                } 

                return count;
}

修正しWORKING VERSION:あなたはみんなありがとう!

static int res(String s1, String s2) {
                HashMap<Character, Integer> mapS1 = new HashMap<>();
                HashMap<Character, Integer> mapS2 = new HashMap<>();
                int count = 0;

                for(int i = 0; i < s1.length(); i++)
                        mapS1.put(s1.charAt(i), mapS1.getOrDefault(s1.charAt(i), 0) + 1);
                for(int i = 0; i < s2.length(); i++)
                        mapS2.put(s2.charAt(i), mapS2.getOrDefault(s2.charAt(i), 0) + 1);

                for(Map.Entry<Character, Integer> entry : mapS1.entrySet()) {
                        int a = mapS1.getOrDefault(entry.getKey(), 0);
                        int b = mapS2.getOrDefault(entry.getKey(), 0);
                        System.out.println(a + " " + b);
                        count += Math.min(a, b);
                }

                return count;
        }
```


Amongalen:

あなたのコード内の2つの問題があります。まず、「それほど重要なのは、」コピー&ペーストエラーです。あなたがに要素を追加している第二のループではmapS1再び、私はそれがあることを意味したと考えていますmapS2

あなたがコメントで述べてきたように、主な問題は、あなたがこの行に取得しているのNullPointerExceptionです。

int b = mapS2.get(entry.getKey());

これは、それが返す指定されたキーの任意の値がない場合、ことに起因しますnullそして、それはnullに割り当てることになっているbこれはintint変数はNULL値を受け入れるため、NPEをスローしません。最も簡単な解決策は、任意のマッピングが存在しなかった場合に、デフォルト値を返すことです。あなたはこのようにそれを行うことができます。

int b = mapS2.getOrDefault(entry.getKey(), 0);

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=300354&siteId=1