389. Find the Difference

兩個都是小寫字母的字符串s,t;t是s打亂后又加了一個字母的字符串。求加的那個字母。

APPROACH1: 利用map

這題我一開始覺得用一個int/boolean數組模擬的map就好了,記錄s里出現過的,t里面沒出現過的,但竟然忘記考慮aa這種重復的情況,dumb。
那好像需要兩個map?我又想了一下其實也不需要,第二趟遍歷t的時候,再toggle回來就好了,比如,用一個boolean數組,第一遍遍歷s的時候把出現過的toggle成true,第二遍把t出現過的toggle一遍,那這時候原來是false的那個就會被toggle成true,只要判斷
toggle的辦法不行,因為s可能有不確定個出現次數的字母。只能用兩個map對比了。

APPROACH2: SORT

這個方法蠻清晰的,排序一下對比就好了。

    public char findTheDifference(String s, String t) {
        char c1[] = s.toCharArray();
        char c2[] = t.toCharArray();
        Arrays.sort(c1);
        Arrays.sort(c2);
        for (int i = 0; i < s.length(); i++) {
            if (c1[i] != c2[i]) {
                return c2[i];
            }
        }
        return c2[c2.length - 1];
    }

APPROACH3: BIT MANIPULATION

我還是不夠敏感的,當只有一個數不一樣的時候,能想到什么?異或啊。跟136題 SINGLE NUMBER一樣的解法。

public char findTheDifference(String s, String t) {
    int n = t.length();
    char c = t.charAt(n - 1);
    for (int i = 0; i < n - 1; ++i) {
        c ^= s.charAt(i);
        c ^= t.charAt(i);
    }
    return c;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容