LeetCode 389 找不同 三種方法

2021-10-12 08:47:43 字數 1352 閱讀 1557

給定兩個字串 s 和 t,它們只包含小寫字母。

字串 t 由字串 s 隨機重排,然後在隨機位置新增乙個字母。

請找出在 t 中被新增的字母。

示例 1:

輸入:s = "abcd", t = "abcde"

輸出:"e"

解釋:'e' 是那個被新增的字母。

示例 2:

輸入:s = "", t = "y"

輸出:"y"

示例 3:

輸入:s = "a", t = "aa"

輸出:"a"

示例 4:

輸入:s = "ae", t = "aea"

輸出:"a"

0 <= s.length <= 1000

t.length == s.length + 1

s 和 t 只包含小寫字母

【方法一】計數

題目說了只有小寫字母(26個),可以設定乙個大小為26的陣列,儲存對應字母的數量。掃瞄s串時,陣列加一;掃瞄t串時,陣列減一。最終陣列中不等於0的元素對應的字母即為所求。

:如果改變字母的型別,用陣列表示某些資料可能會有些困難,不過可以用acsll碼的值作為下標。

class solution 

cnt[t.charat(lens)-'a']--;

char ans = 'a';

for (int i = 0; i < 26; i++) // 找多餘的字母

if (cnt[i] != 0)

return ans;

}}

【方法二】ascii碼求和

對兩個字串的ascii分別求和,用t串的和減去s串的和,即為所求字母。

:如果字串的長度較長,會導致sum溢位。

class solution 

return (char)(sum_t - sum_s); // 作差

}}

【方法三】異或(最優的解法)

對兩個串進行異或運算,最後單出的字母即為所求。

class solution 

return (char)ans;

}}

leetCode 389 找不同 簡單

給定兩個字串 s 和 t,它們只包含小寫字母。字串 t 由字串 s 隨機重排,然後在隨機位置新增乙個字母。請找出在 t 中被新增的字母。遍歷s中的字元進行計數,再遍歷t中的字元將對應的字元數量 如果t中乙個字元的數量為0那麼該字元為新增的字元。class solution for int i 0 i...

LeetCode389 找不同 查詢

查詢問題,最先想到map和set 一開始覺得用set即可,因為把s的內容存進去,對t進行遍歷,不在裡面的肯定就是新增加的了 public char findthedifference string s,string t char result for int i 0 i return result ...

leetcode題目 389 找不同

給定兩個字串 s 和 t,它們只包含小寫字母。字串 t 由字串 s 隨機重排,然後在隨機位置新增乙個字母。請找出在 t 中被新增的字母。輸入 s abcd t abcde 輸出 e 解釋 e 是那個被新增的字母。先用hashmap統計t t為較長的那個字串 的字母頻率,然後再遍歷s的字母,遇到乙個字...