持续创作,加速成长!这是我参与「掘金日新计划 · 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);
}
}