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

devtools/2025/2/23 9:48:28/

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.ppmy.cn/devtools/161151.html

相关文章

Docker 与 CI/CD:自动化构建和部署

在现代软件开发中&#xff0c;CI/CD&#xff08;持续集成/持续部署&#xff09; 是一种高效的软件开发和运维方法。CI/CD 通过自动化构建、测试和部署流程&#xff0c;减少了人为错误&#xff0c;提高了软件交付的速度和质量。Docker&#xff0c;作为一种容器化平台&#xff0c…

【目标检测】【YOLOv4】YOLOv4:目标检测的最佳速度与精度

YOLOv4&#xff1a;目标检测的最佳速度与精度 0.论文摘要 有许多特征被认为可以提高卷积神经网络&#xff08;CNN&#xff09;的准确性。需要在大规模数据集上对这些特征的组合进行实际测试&#xff0c;并对结果进行理论上的验证。某些特征仅适用于特定模型和特定问题&#…

宝塔扩容——阿里云如何操作

一、创建快照 磁盘快照&#xff0c;将数据备份&#xff0c;防止丢失。 1.登录“阿里云”账号 2.点击“控制台”——“云服务器 ECS” 3.点击“基本信息”下&#xff0c;右下角“系统盘” 4.点击“创建快照” 二、磁盘扩容 1.点击“云盘扩容” 2. 选择自己要扩容的大小 …

HTTPS 证书交换流程

HTTPS 的密钥交换过程是基于 TLS&#xff08;Transport Layer Security&#xff09;协议实现的&#xff0c;其核心目标是通过加密和认证机制确保通信双方的安全性。以下是详细的 HTTPS 密钥交换过程的时序图&#xff0c;包括具体加密算法和细节。 HTTPS 密钥交换过程详细时序图…

网络安全-php安全知识点

写给和我一样没学过php的安全小白&#xff0c;只是为了让你看懂php代码&#xff0c;专门学后端的请出门左转。学安全需要学的东西太多&#xff0c;你不可能把js学的和做前端的同学一样好、把php学的和做后端的一样好&#xff0c;把数据库学的和做数据库优化的同学一样好&#x…

纠错检索增广生成论文

一、摘要 动机&#xff1a;RAG严重依赖于检索文档的相关性&#xff0c;如果检索出错&#xff0c;那么LLM的输出结果也会出现问题 解决方案&#xff1a;提出纠正性检索增强生成&#xff08;CRAG&#xff09;即设计一个轻量级的检索评估器&#xff0c;用来评估针对某个查询检索…

【Deepseek+Dify】wsl2+docker+Deepseek+Dify部署本地大模型知识库问题总结

wsl2dockerDeepseekDify部署本地大模型知识库问题总结 基于ollama部署本地文本模型和嵌入模型 部署教程 DeepSeekdify 本地知识库&#xff1a;真的太香了 问题贴&#xff1a;启动wsl中docker中的dify相关的容器 发现postgre服务和daemon服务一直在重启&#xff0c;导致前端加…

OpenGL(2)基于Qt做OpenGL开发

文章目录 一、基于Qt做OpenGL开发1、环境准备2、创建OpenGL窗口3、绘制基本图形 一、基于Qt做OpenGL开发 1、环境准备 确保你已经安装了 Qt 开发环境&#xff08;包含 Qt Creator&#xff09;&#xff0c;并且支持 OpenGL 开发。在创建 Qt 项目时&#xff0c;选择 “Qt Widget…