LeetCode精华75题(持续更新)

LeetCode刷题笔记

数组/字符串

交替合并字符串

  • 题目:

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

    返回 合并后的字符串

  • 题解:

    • C:

      可以利用双指针交替移动获取字符然后存入到结果字符串中,注意结束条件,当其中一个指针到达字符串尾端时,直接将另一字符串的剩余部分加入到结果串中。

      char * mergeAlternately(char * word1, char * word2){
             
          // 直接调用strlen函数获取字符串长度
          int len=strlen(word1)+strlen(word2);
          // 申请空间,预留结束符的空间
          char *ans=malloc(len+1);
          char *p1 = word1;
          char *p2 = word2;
          int i=0;
          while(i<len)
          {
              
              ans[i]=*(p1++);
              i++;
              
              // 注意:字符串的结束符是'\0' 而不是"\0"
              if(*p1=='\0') // p1到达串1尾端,直接将串2剩余部分加到结果串,结束循环
              {
             
                  strcpy(ans+i,p2);
                  break;
              }
              
              ans[i]=*(p2++);
              i++;  
              if(*p2=='\0')
              {
             
                  strcpy(ans+i,p1);
                  break;
              }     
          }
          
          ans[len]='\0';	// 添加结束符,防止越界
          return ans;
      }
      
    • C++:

      可以利用C++的库函数尾插push_back()

      class Solution {
      public:
          string mergeAlternately(string word1, string word2) {
              int m = word1.size();
              int n = word2.size();
              string res;
              res.reserve(m+n);
              
              int i=0,j=0;
              while(i<m||j<n) // 只要有一个字符串没有到达尾端就继续循环
              {
                  if(i<m)
                      res.push_back(word1[i++
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值