0222-leetcode-1768.交替合并字符串、389找不同、

news/2025/2/23 9:48:14

1768.交替合并字符串

题目

给你两个字符串 word1word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。

返回 合并后的字符串

示例 1:

输入:word1 = "abc", word2 = "pqr"
输出:"apbqcr"
解释:字符串合并情况如下所示:
word1:  a   b   c
word2:    p   q   r
合并后:  a p b q c r

示例 2:

输入:word1 = "ab", word2 = "pqrs"
输出:"apbqrs"
解释:注意,word2 比 word1 长,"rs" 需要追加到合并后字符串的末尾。
word1:  a   b 
word2:    p   q   r   s
合并后:  a p b q   r   s

示例 3:

输入:word1 = "abcd", word2 = "pq"
输出:"apbqcd"
解释:注意,word1 比 word2 长,"cd" 需要追加到合并后字符串的末尾。
word1:  a   b   c   d
word2:    p   q 
合并后:  a p b q c   d

提示:

  • 1 <= word1.length, word2.length <= 100
  • word1word2 由小写英文字母组成

解题思路

只要将字符串中的每个元素都取出来(类似于数组取元素),然后再进行相加即可。需要分为两次,第一次是两个字符串都没比较完时;第二次是有一个字符串比较完成,为空,这时候只要把另一个字符串直接加到后面即可。

相关知识点

字符串可以看成数组,每个字符对应数组中的一个元素,这样就可以进行字符相加的操作

代码

/**
 * @param {string} word1
 * @param {string} word2
 * @return {string}
 */
var mergeAlternately = function(word1, word2) {
    let i=0,j=0;
    let connection = '';
    //交替合并
    while(i<word1.length&&j<word2.length){
        connection+=word1[i++];
        connection+=word2[j++];
    }
    while (i < word1.length || j < word2.length) 
    { 
        if (i < word1.length) { connection += word1[i++]; } 
        if (j < word2.length) { connection += word2[j++]; } 
    }
    // //如果word1还有字符,追加到结果尾部
    // while(i<word1.length){
    //     connection+=word1[i++];
    // }
    // //如果word2还有字符,追加到结果尾部
    // while(j<word2.length){
    //     connection+=word2[j++];
    // }
    return connection;
};

389.找不同

题目

给定两个字符串 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 只包含小写字母

一、使用字符频率计数

解题思路

本质上就是需要比较两个字符串有哪个元素不同,这种类型的题目可以通过统计字符出现的字数去比较。(另外,即使是有多处不同也可以用这种方法)

相关知识点

1.使用 JavaScript 中的 for...of 循环语法来遍历字符串中的每个字符。表现为let char of s(遍历s中的元素)

注意:在 JavaScript 中,for...of 循环的完整语法要求使用 let(或者 const)来声明迭代变量。因此,省略 let或 const 是不允许的。

因此写成for char of s { xxx }是错误的。

正确的语法是:for (let char of s) { xxx}

2.可以通过数组存储这个元素的个数 这样便于比较

代码

var findTheDifference = function(s, t) {
    // 使用字符频率计数
    const count = {};
  // 计算s中每个字符的频率
  for (let char of s) {
    count[char] = (count[char] || 0) + 1;
  }
  
  // 减去t中每个字符的频率
  for (let char of t) {
    if (!count[char]) {
      return char; // 如果字符在s中不存在,那么这就是多出的字符
    }
    count[char]--;
  }
};

二、排序后比较

解题思路

可以对两个字符串进行排序,然后按字符比较。排序后,字符串 s 和 t 除了多出的那个字符外,其他字符应该是一一对应的。所以遇到不想等的字符 一定是那个添加的字符。如果前面s个长度的字符串都相同,那多出来的字符就是那个多余的字符串。

相关知识点

把字符串拆分是s.split(''),排序是sort(),将字符连接起来成字符串是.join(''); 注意是split不是spilt;注意是('')还是();

s.split('').sort().join('') 是一个链式调用,它包含三个不同的字符串方法,每个方法都对字符串 s 执行特定的操作。下面我会逐一解释每个方法的作用:

  1. split('')

    • split 方法是字符串原型上的一个方法,用于将字符串分割成子字符串数组。
    • 参数 ‘’(空字符串)告诉 split 方法在每个字符之间分割字符串。
    • 结果是 s 中的每个字符都被分离出来,并放入一个数组中。例如,如果 s 是 “hello”,那么 s.split('') 将返回 ['h', 'e', 'l', 'l', 'o']
  2. sort()

    • sort 方法是数组原型上的一个方法,用于对数组中的元素进行排序。
    • 当没有提供比较函数时,sort 方法将按照每个元素的 Unicode 编码顺序进行排序。
    • 在上面的例子中,['h', 'e', 'l', 'l', 'o'].sort() 将返回 ['e', 'h', 'l', 'l', 'o']。注意,数字和字母是按照它们在 Unicode 表中的顺序排序的,而不是按照字典顺序。这就是为什么 ‘e’ 排在 ‘h’ 前面的原因。
  3. join('')

    • join 方法也是数组原型上的一个方法,用于将数组中的所有元素连接成一个字符串。
    • 参数 ‘’(空字符串)告诉 join 方法在元素之间不添加任何分隔符。
    • 在上面的例子中,['e', 'h', 'l', 'l', 'o'].join('') 将返回 'ehllo',这是经过排序后的字符数组重新组合成的字符串。

所以,如果 s 是 “hello”,那么 s.split('').sort().join('') 的最终结果是 'ehllo',这是将 “hello” 字符串中的字符按照 Unicode 编码顺序排序后的结果。需要注意的是,sort 方法默认不会区分大小写,并且它对某些字符的排序可能不符合预期的字典顺序。如果需要按照字典顺序排序,你应该提供一个自定义的比较函数给 sort方法。

代码

/**
 * @param {string} s
 * @param {string} t
 * @return {character}
 */
var findTheDifference = function(s, t) {

const sortedS=s.split('').sort().join('');
const sortedT=t.split('').sort().join('');
for(let i=0;i<sortedS.length;i++){
    if(sortedS[i]!==sortedT[i])
    return sortedT[i];
}
return sortedT[sortedT.length-1]
};


http://www.niftyadmin.cn/n/5863279.html

相关文章

[VSCode]彻底卸载和重装,并搭建Java开发环境

VSCode彻底卸载 由于当初是朋友帮忙装的&#xff0c;所以准备卸载,自己装一遍 从控制面板找到 vscode 将其卸载。 此时仅仅是删除了应用软件 删除安装插件 在图示路径中找到 .vscode 文件夹&#xff0c;将其删除&#xff0c;即可彻底清除安装的插件 C:\Users\user\.vscode …

组合优化问题的机器学习研究——以图匹配问题为例

【OR Talk NO.17 | 组合优化问题的机器学习研究——以图匹配问题为例】https://www.bilibili.com/video/BV1Zf4y1S7Zr?vd_source7c2b5de7032bf3907543a7675013ce3a 定义&#xff1a; 什么是图匹配&#xff1f; 在三个图片上提取点&#xff0c;包括内点、外点、噪声点&#x…

Win11 24h2 不能正常使用ensp的问题(已解决)

因为Win11 24h2的内核大小更改&#xff0c;目前virtualbox在7.1.4中更新解决了。所以Win11 24H2系统版本无法使用 5.x.xx的virtualbox版本&#xff0c;virtualbox对于这个5.x.xx版本早已停止维护&#xff0c;所以这个以后不会有调整。 对应的报错代码是 virtualbox错误代码&…

计算机视觉算法实战 —— 虚拟试衣:从技术突破到商业落地(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ 一、领域简介✨✨ 虚拟试衣&#xff08;Virtual Try-On&#xff09; 是计算机视觉与增强现实&#xff08;AR&#xff09;的交叉领域&#xf…

【多模态处理篇五】【DeepSeek文档解析:PDF/Word智能处理引擎】

你知道吗?全球每天产生的PDF文档超过10亿份,但90%的上班族还在用复制粘贴的笨办法处理文档!DeepSeek文档解析引擎就像给你的电脑装上了"文档翻译官",能把PDF/Word里的文字、表格、公式甚至排版样式都变成AI能理解的"语言"。举个真实场景:法务小姐姐用…

【p-camera-h5】 一款开箱即用的H5相机插件,支持拍照、录像、动态水印与样式高度定制化。

【开源推荐】p-camera-h5&#xff1a;一款轻量级H5相机插件开发实践 一、插件背景 在Web开发中&#xff0c;原生摄像头功能的集成往往面临以下痛点&#xff1a; 浏览器兼容性问题视频流与水印叠加实现复杂移动端适配困难功能定制成本高 为此&#xff0c;p-camera-h5 —— 一…

ARM Cortex-M3 技术解析:核寄存器R1-R15介绍及使用

ARM Cortex-M3 技术解析&#xff1a;核寄存器R1-R15介绍及使用 作为嵌入式开发领域的经典处理器内核&#xff0c;ARM Cortex-M3&#xff08;CM3&#xff09;凭借其高效能、低功耗和丰富特性&#xff0c;在工业控制、物联网、消费电子等领域广泛应用。而内核寄存器是我们调试代…

DeepSeek人工智能:大模型概念、技术与应用实践(2025)

在数字化浪潮汹涌澎湃的当下&#xff0c;大模型如同一颗璀璨新星&#xff0c;强势崛起并迅速成为科技领域的焦点。从最初的理论探索到如今在各个行业的广泛应用&#xff0c;大模型正以惊人的速度重塑着我们的生活与工作模式。它不仅是人工智能技术发展的重大突破&#xff0c;更…