前言:今天妹有深夜档,因为8点有个飞机
题型:字符串、双指针(笔者没用这个思路)
链接:1768. 交替合并字符串 - 力扣(LeetCode)
来源:LeetCode 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题目描述
给你两个字符串 word1
和 word2
。请你从 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
word1
和word2
由小写英文字母组成
题目思路
妹有时间/空间复杂度上面的要求,那你可以考虑通过创一个【新数组】(这里是字符串)的形式来存你要return的这个串。
实现“插入”这个要求的思路感觉很多,笔者这里是①比较了下哪个串更短,②将【较长串】剩下的元素放到要返回的串的尾巴即可(因为创了个新的字符串,空间复杂度会高点--虽然没有要求吧)
当然双指针这个也可以,在有一个新数组的基础上,先添加一个【数组1】,再添加一个【数组2】(当然必要的判空操作也要进行)
↑感觉和笔者说的大差不离↑
看起来更加简短,实际上感觉和笔者的思路很像 (通过Math库的min来实现if判断那一串)
C++代码
class Solution {
public:
string mergeAlternately(string word1, string word2) {
int len=word1.length(),i;
int a=0,b=0;
if(word1.length()>word2.length())
{
len=word2.length();
b=1;//2短
}
if(word1.length()<word2.length())
{
len=word1.length();
a=1;//1短
}
//cout<<len<<endl;
string rt;
for(int i=0;i<len;i++)
{
rt+=word1[i];
rt+=word2[i];
}
if(a==1)
{
for(i=len;i<word2.length();i++)
{
rt+=word2[i];
}
}
if(b==1)
{
for(i=len;i<word1.length();i++)
{
rt+=word1[i];
}
}
return rt;
}
};
虽然思路相差不大,但是这一大串代码 没有对比就没有伤害啊哈哈哈哈