算法小知识-----10.23----- 交替合并字符串

62 阅读2分钟

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

快乐周六,全程起飞~~

交替合并字符串

该题出自力扣的1768题 —— 交替合并字符串【简单题】

审题

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

  • 这道题因为是简单题,所以就额外地简单
  • 给出两个字符串,最终返回一个拼接的字符串,那么拼接的业务规则就是交替拼接,例如"abc"和"qwe"最终就需要返回"aqbwce"
  • 简单题型简单实现,直接定义一个StringBuilder作为拼接字符串,定义两个字符串的最长长度变量
  • 遍历,两个字符串交替拼接,并且加上条件,如果超出长度范围的则把剩余的字符串拼接进去
  • 除了这种解法意外,其实还可以,利用Math的方法的Max和min,获取出最大长度和最小长度,然后再遍历最小长度以后,对剩余的最大长度直接补充。同样的复杂度,能降低系数也是降低。既然要追求刺激,那就贯彻到底嘛
  • 由于word1和word2的长度有可能是不同的,所以在遍历的判断上,我们采用 i < w1 || i < w2 (其中: w1是word1的长度,w2是word2的长度)。而在拼装上,只有当 i < w1的时候才拼装word1的字符;只有当 i < w2的时候才拼装word2的字符;先交替填充,然后再多余的字符填充到最后

编码

class Solution {
    public String mergeAlternately(String word1, String word2) {
        int n1 = word1.length(),n2 = word2.length();
        int n = Math.max(n1,n2);
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n; i++) {
            if (i < n1){
                sb.append(word1.charAt(i));
            }
            if (i < n2){
                sb.append(word2.charAt(i));
            }
        }
        return sb.toString();
    }
}

image.png