【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に追加された文字を見つけてください。
問題解決方法
- この質問は、配列内の他の要素が2回表示され、唯一の要素が1回表示される質問に似ています。
- XORの特性は借用できます:a b a = b、これは繰り返される要素が2回XORされ、最終的に除去されることに相当します
- 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%を上回っています