【LeetCode】389。間違い探し(簡単)(JAVA)

【LeetCode】389。間違い探し(簡単)(JAVA)

タイトルアドレス:https//leetcode-cn.com/problems/find-the-difference/

タイトル説明:

2つの文字列sとtが与えられます。

文字列tは、文字列sをランダムにシャッフルして生成され、ランダムな位置にもう1文字追加されます。

tに追加された文字を返します。

例1:

Input: s = "abcd", t = "abcde"
Output: "e"
Explanation: 'e' is the letter that was added.

例2:

Input: s = "", t = "y"
Output: "y"

例3:

Input: s = "a", t = "aa"
Output: "a"

例4:

Input: s = "ae", t = "aea"
Output: "a"

制約:

  • 0 <= s.length <= 1000
  • t.length == s.length + 1
  • sとtは小文字の英字で構成されます。

一般的なアイデア

2つの文字列sとtが与えられた場合、それらには小文字のみが含まれます。

文字列tは文字列sによってランダムに再配置され、文字がランダムな位置に追加されます。

tに追加された文字を見つけてください。

問題解決方法

  1. この質問は、配列内の他の要素が2回表示され、唯一の要素が1回表示される質問に似ています。
  2. XORの特性は借用できます:a b a = b、これは繰り返される要素が2回XORされ、最終的に除去されることに相当します
  3. sとtのすべての要素が一度XORされる限り、結果は次のようになります。
class Solution {
    public char findTheDifference(String s, String t) {
        char res = 0;
        for (int i = 0; i < s.length(); i++) {
            res ^= s.charAt(i);
            res ^= t.charAt(i);
        }
        res ^= t.charAt(t.length() - 1);
        return res;
    }
}

実行時間:2ミリ秒、Javaユーザーの76.78%を上回っています
メモリ消費量:37 MB、Javaユーザーの37.49%を上回っています

私の公式アカウントに注意を払うことを歓迎します、LeetCodeは毎日1つの質問を更新します

おすすめ

転載: blog.csdn.net/qq_16927853/article/details/111879981