[LeetCode]389. Find the Difference

来源:互联网 发布:2017院士增选 知乎 编辑:程序博客网 时间:2024/05/18 08:40

依旧是利用a^b^b==a的bit manipulation的特性。另一个方法则利用了将字母作为数组下标的方法。(从本质上来讲,在计算机里面,可以认为char就是int了,就是说可以把char当作int来用,如,作为数组下标。)


Given two strings s and t which consist of only lowercase letters.

String t is generated by random shuffling string s and then add one more letter at a random position.

Find the letter that was added in t.

Example:

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

方法一:用HashMap

public class Solution {    public char findTheDifference(String s, String t) {        //char res='';        Map<Character,Integer> map = new HashMap<>();        for(char c : s.toCharArray())            map.put(c,map.getOrDefault(c,0)+1);                for(char c : t.toCharArray())        {             map.put(c,map.getOrDefault(c,0)-1);            if(map.get(c)==-1)                return c;        }                return 0;    }}


方法二:用数组。本质上和方法一相同。

for (int i = 0; i < 26; i++) alpha[i] = 0;        for (char c : s.toCharArray())            alpha[ c - 'a' ]++;        for (char c : t.toCharArray()) {           //could do decrement first, then check but yeah            if (--alpha[c - 'a'] < 0)                return c;        }        return 0;

一定要学会 arr[ c - 'a' ]++ 这种用法。


方法三:异或。a^b^b==a

public char findTheDifference(String s, String t) {char c = 0;for (int i = 0; i < s.length(); ++i) {c ^= s.charAt(i);}for (int i = 0; i < t.length(); ++i) {c ^= t.charAt(i);}return c;}



原创粉丝点击