给你两个字符串 word1
和 word2
。请你从 word1
开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。
返回 合并后的字符串 。
示例 1:
输入:word1 = "abc", word2 = "pqr" 输出:"apbqcr"
示例 2:
输入:word1 = "ab", word2 = "pqrs" 输出:"apbqrs"
示例 3:
输入:word1 = "abcd", word2 = "pq" 输出:"apbqcd"
提示:
1 <= word1.length, word2.length <= 100
word1
和word2
由小写英文字母组成
思路:先计算word1与word2的长度,再模拟多种情况,进行交叉合并
代码:
class Solution {
public:
string mergeAlternately(string s1, string s2) {
string s3;
int n=s1.size();
int m=s2.size();
int i=0,j=0;
while(i<n&&j<m){
s3=s3+s1[i];
i++;
s3=s3+s2[j];
j++;
}
if(n>m){
for(int i=m;i<n;i++)s3+=s1[i];
}
else{
for(int i=n;i<m;i++)s3+=s2[i];
}
return s3;
}
};
改进:将字符串s3改进为vector中的ans,避免了合并时字符串遇见空字符情况.注意:ans.reserve()为扩容作用
代码:
class Solution {
public:
string mergeAlternately(string s1, string s2) {
int n=s1.size(),m=s2.size();
int i=0,j=0;
string ans;
ans.reserve(n+m);
while(i<n||j<m){
if(i<n){
ans.push_back(s1[i]);
i++;
}
if(j<m){
ans.push_back(s2[j]);
j++;
}
}
return ans;
}
};