題目地址:
https://leetcode-cn.com/probl…
題目描述:
給定兩個字串 s 和 t,它們只包含小寫字母。
字串 t 由字串 s 隨機重排,然後在隨機位置新增一個字母。
請找出在 t 中被新增的字母。
示例:
輸入:
s = “abcd”
t = “abcde”
輸出:
e
解釋:
`e` 是那個被新增的字母。
解答:
這一題可以用兩種解法。
解法一:利用hash表儲存第一個字串的字母的數量,然後遍歷第二個字串的時候
先查詢到字母,然後把數量減一,如果減完之後小於0,說明這個字母就是多出來的字母
這裡的hash表可以用一個陣列來代替,因為這裡不需要解決hash衝突!!!
java ac程式碼:
class Solution {
public char findTheDifference(String s, String t) {
int[] hash = new int[`z`+1];
for(int i = 0;i < s.length();i++)
hash[s.charAt(i)]++;
for(int i = 0;i < t.length();i++)
if( --hash[t.charAt(i)] < 0)
return t.charAt(i);
return ` `;
}
}
解法二:把這題看作是一個陣列裡除了一個數出現了一次,其他都出現了偶數次,然後找出這個數,可以
利用異或,因為偶數個自己異或自己為0,而0異或一個數就等於那個數本身,比如說,有偶數個a,現在這
偶數個a異或結果為0,a^a^a^a…^a=0,而0^b=b。
java ac程式碼
class Solution {
public char findTheDifference(String s, String t) {
char ans = 0;
for(int i = 0;i < s.length();i++)
ans ^= s.charAt(i);
for(int i = 0;i < t.length();i++)
ans ^= t.charAt(i);
return ans;
}
}