1768. 交替合并字符串

题目链接:https://leetcode.cn/problems/merge-strings-alternately/

题目描述:

给你两个字符串 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 由小写英文字母组成

class Solution {
public:
    string mergeAlternately(string word1, string word2) {
        int len1=word1.length();
        int len2=word2.length();
        string s;
        int max=len1;
        if(len1<len2) max=len2;
        for(int i=0;i<max;i++){
            if(i>=len1){
                for(int k=i;k<len2;k++){
                    s.push_back(word2[k]);
                }
                return s;
            }else if(i>=len2){
                 for(int k=i;k<len1;k++){
                    s.push_back(word1[k]);
                }
                return s;
            }
            s.push_back(word1[i]);
            s.push_back(word2[i]); 
        }
        return s;
    }
};

思路:直接根据字符串长短,在一个循环里插入,时间复杂度为2n,当把两者都有的长度的数据都插入时,在循环内部插入另一个未插完的字符,当结束时直接返回字符串,即可跳出所以不必要的循环

解题遇到的问题:向字符串中插入指定字符时,可以使用s.push_back()进行添加,s.append()可以在指定位序或指定字符串的个数时使用。在开始写时,将

​ s.push_back(word1[i]);
​ s.push_back(word2[i]);

放到了两个判断语句之前,那么当其中一个字符超出自身长度时,会在插入时插入一个[],后改正后,发现一个样例过不去,纠察代码发现判断语句的循环中写入的是k+1,因为之前将插入放在了判断前,所以会将不超过自身长度的数据插入进去,但是如果将判断放在前面,那么当一个超出自身长度时,未超过长度的那一个将会跳过k=i这个数据,改正后代码AC。
AC效果图
代码优化:可以将判断二者长度改为直接插入二者字符串,设置两个变量分别记录每个字符串对应的位数,一方结束则直接舍弃

class Solution {
public:
    string mergeAlternately(string word1, string word2) {
        int len1=word1.length();
        int len2=word2.length();
        int i=0;
        int j=0;
        string s;
      	while(i<len1||j<len2){
      		if(i<len1) s.push_back(word1[i++]);
      		if(j<len2) s.push_back(word2[j++]);
      	}
        return s;
    }
};

仅凭结果而已,反向优化了,但是从代码可读性和简洁性来说,提高了很。刚开始写时没加while里的if判断,导致会出现数组越位的错误
反向优化

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值