LeetCode 389. 找不同 | 算法-从菜鸟开始

简介: LeetCode 389. 找不同 | 算法-从菜鸟开始

LeetCode 389. 找不同


题目介绍:


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


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


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


示例:


输入: s = "abcdef", t = "abcdefg"
输出: "g"
解释: 'g' 是那个被添加的字母。


题目分析


很多小伙伴在看到这道题的时候,内心都是一喜,这也太简单了,难道是最近扶老奶奶过马路太多了,老天爷眷顾了。


上来一顿遍历字符串t,判断某个字符不在s中,说明这个就是随机添加的字母。

啪啪啪,一顿键盘操作,写完收工~


提交后,结果却啪啪打脸~


按照这个思路,不存在s中的字符肯定是新增加的,但是新增加的字符是有可能在s中存在的!


方案:考虑字符的ASCII码值


我们都知道每一个字符都有对应的ASCII码值,字符串st只是新增加了一个字符,倘若我们把所有的字符ASCII码累加到一起,st的ASCII码值和相减,多出的ASCII码值就是对应了一个新增的字符。


Up Code ~ 上码 ~


/**
 * @method findTheDifference
 * @description: 通过ASCII码找不同
 * @param {string} s
 * @param {string} t
 * @return {string}
 */
function findTheDifference(s: string, t: string): string {
  // 获取s字符串长度
  const sLen = s.length;
  // 特殊情况处理,s长度为0,直接返回t即可
  if (sLen === 0) {
    return t;
  }
  // 接收字符串s的ASCII码值
  let sAscii = 0;
  // 接收字符串t的ASCII码值
  let tAscii = 0;
  // 遍历s的每一个字符
  for (let i = 0; i < sLen; i++) {
    // 将每一个ASCII码值进行累加
    sAscii += s[i].charCodeAt(0);
  }
  // 遍历t的每一个字符
  for (let i = 0; i < t.length; i++) {
    // 将每一个ASCII码值进行累加
    tAscii += t[i].charCodeAt(0);
  }
  // 二者相减,将ASCII码再转为对应的字符
  return String.fromCharCode(tAscii - sAscii);
}


功能测试:


let s1 = 'abcdef';
let t1 = 'abcdefg';
console.log(findTheDifference(s1, t1)); // g
let s2 = 'abcde';
let t2 = 'abcdea';
console.log(findTheDifference(s2, t2)); // a


嘎嘎好使


相关文章
|
2月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
41 0
|
29天前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
|
2月前
|
算法
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
29 2
|
4月前
|
算法
测试工程师的技能升级:LeetCode算法挑战与职业成长
这篇文章通过作者亲身体验LeetCode算法题的过程,探讨了测试工程师学习算法的重要性,并强调了算法技能对于测试职业成长的必要性。
76 1
测试工程师的技能升级:LeetCode算法挑战与职业成长
|
4月前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
54 6
|
4月前
|
存储 算法 Java
LeetCode经典算法题:打家劫舍java详解
LeetCode经典算法题:打家劫舍java详解
70 2
|
4月前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
52 1
|
4月前
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
62 1
|
4月前
|
存储 算法 Java
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
81 0
|
4月前
|
算法 Java
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
43 0