求star

开源不易,喜欢请点个star吧

Ocean Han
298 字
1 分钟
Leetcode->找不同
2022-08-03

题目#

给定两个字符串 st ,它们只包含小写字母。

字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。

请找出在 t 中被添加的字母。

示例 1:

输入:s = "abcd", t = "abcde"
输出:"e"
解释:'e' 是那个被添加的字母。

示例 2:

输入:s = "", t = "y"
输出:"y"

提示:

  • 0 <= s.length <= 1000
  • t.length == s.length + 1
  • st 只包含小写字母

解题:key:#

①求和#

TIP

​ 计算两个字符串中字符的ASII码值和,差值就是添加的字母

/**
 * @param {string} s
 * @param {string} t
 * @return {character}
 */
var findTheDifference = function(s, t) {
    let ss = 0,st = 0
    for(let i=0;i<s.length;i++){
        ss += s[i].charCodeAt()
    }
    for(let i=0;i<t.length;i++){
        st += t[i].charCodeAt()
    }
    return String.fromCharCode(st - ss)
};

②计数#

/**
 * @param {string} s
 * @param {string} t
 * @return {character}
 */
var findTheDifference = function(s, t) {
    let cnt = new Array(26).fill(0)
    for(let i=0;i<s.length;i++){
        cnt[s[i].charCodeAt() - 'a'.charCodeAt()]++ 
    }
    for(let i=0;i<t.length;i++){
        cnt[t[i].charCodeAt() - 'a'.charCodeAt()]--
        if(cnt[t[i].charCodeAt() - 'a'.charCodeAt()] < 0)
            return t[i]
    }
    
};

③将两个字符串拼接,求出现一次的数字#

/**
 * @param {string} s
 * @param {string} t
 * @return {character}
 */

// 利用异或运算
var findTheDifference = function (s, t) {
    let res = 0
    for(const ch of s){
        res ^= ch.charCodeAt()
    }
    for(const ch of t){
        res ^= ch.charCodeAt()
    }
    return String.fromCharCode(res)
    
};
Leetcode->找不同
https://blog.oceanh.top/posts/algorithm/找不同/
作者
Ocean Han
发布于
2022-08-03
许可协议
CC BY-NC-SA 4.0
最后修改时间
2024-08-10 10:08:49