刷题的日常-交替合并字符串

114 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第26天,点击查看活动详情

刷题的日常-2022年10月23号

一天一题,保持脑子清爽

交替合并字符串

来自leetcode的 1768 题,题意如下:

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

返回 合并后的字符串

示例1:

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

理解题意

通过题意,我们可以将信息整理如下:

  • 题目给出两个字符串
  • 要求我们将两个字符串的字符提取出来
  • 将提取出来的字符交替拼接在一起
  • 如果最后有多出来的字符,则全部放在最后面

做题思路

简单题,直接模拟即可。题目给出的两个字符串不一定相等,所以我们拼接的时候可以先拼接短一点的字符串,然后将长一点的字符串往后直接塞进结尾即可,步骤如下:

  • 开辟一个字符数组,因为是拼接的结果,所以长度为两个字符串的长度和
  • 取最小的字符串长度
  • 进行循环拼接,因为循环最大值为最小字符串长度,所以这里不会有越界
  • 交替拼接完成之后要取最大长度值
  • 如果最大长度和最小长度不一致,则将最长字符串放到word1中
  • 最后继续往后遍历word1将余下的字符拼接回去即可
  • 返回拼接结果

代码实现

代码实现如下:

public class Solution {
    public String mergeAlternately(String word1, String word2) {
        char[] result = new char[word1.length() + word2.length()];
        int len = Math.min(word1.length(), word2.length());
        int maxLen = Math.max(word1.length(), word2.length());
        int idx = 0;
        for (int i = 0; i < len; i++) {
            result[idx++] = word1.charAt(i);
            result[idx++] = word2.charAt(i);
        }
        word1 = word1.length() > word2.length() ? word1 : word2;
        for (int i = len; i < maxLen; i++) {
            result[idx++] = word1.charAt(i);
        }
        return new String(result);
    }  
}

image.png