题意是给了两个string S和T,T是S shuffle后又额外加了一个character。找出这个额外的character。
思路还是用异或XOR,两边按char做XOR。相同的char做XOR为0,如果S和T一模一样,最后的结果会是0;在T中额外的char异或0的时候,会得到它本身。代码如下,
1 /** 2 * @param {string} s 3 * @param {string} t 4 * @return {character} 5 */ 6 var findTheDifference = function(s, t) { 7 let ss = s.split('').sort(); 8 let tt = t.split('').sort(); 9 let i; 10 for (i = 0; i < ss.length; i++) { 11 if (ss[i] !== tt[i]) { 12 return tt[i]; 13 } 14 } 15 return tt[i]; 16 };
2020年1月2日更新
之前的做法根本不是位运算,而是简单的数组排序一一比较。位运算代码如下
时间O(n) - number of characters
空间O(1)
1 /** 2 * @param {string} s 3 * @param {string} t 4 * @return {character} 5 */ 6 var findTheDifference = function (s, t) { 7 let c = t.charCodeAt(t.length - 1); 8 for (let i = 0; i < s.length; i++) { 9 c ^= s.charCodeAt(i); 10 c ^= t.charCodeAt(i); 11 } 12 return String.fromCharCode(c); 13 };