You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode 1768题:字符串交替合并时for循环失效问题求助

问题分析与解决方案

你的核心问题出在for循环的条件逻辑错误,导致循环体根本没有执行,所以merged始终是空字符串。另外还有C#字符串操作的细节问题,下面逐一拆解:

1. 循环条件的致命错误

你用i <= word1.Length ^ i <= word2.Length作为循环条件,这里的^是C#的异或运算符,逻辑是两个条件一真一假时返回true,但这完全不符合交替合并的需求:

  • 当i=0时,0 <= word1.Length和0 <= word2.Length都是true,异或结果为false,循环直接跳过不执行,这就是merged为空的根本原因。
  • 正确的循环条件应该是同时满足i小于两个字符串的长度,也就是i < word1.Length && i < word2.Length,这样会循环到较短字符串的最后一个索引,保证每次循环都能取到两个字符串的对应字符。

2. C#字符串操作的问题

  • 第一种写法里的merged.Append(word1[i])是错误的:C#的string类型没有Append方法,若想高效拼接字符串,应该用StringBuilder;如果直接用字符串拼接,只能用+=。
  • 第二种写法的+=是可行的,但频繁拼接字符串效率较低,推荐用StringBuilder。

修正后的代码示例

方案一:使用StringBuilder(推荐,效率更高)

string word1 = "abc";
string word2 = "defgh";
StringBuilder merged = new StringBuilder();

// 交替合并共同长度部分
for (int i = 0; i < word1.Length && i < word2.Length; i++)
{
    merged.Append(word1[i]);
    merged.Append(word2[i]);
}

// 追加剩余部分
if (word1.Length > word2.Length)
{
    merged.Append(word1.Substring(word2.Length));
}
else
{
    merged.Append(word2.Substring(word1.Length));
}

string result = merged.ToString(); // 结果为"adbecfgh"

方案二:直接用字符串拼接(简单但效率低,短字符串场景可用)

string word1 = "abc";
string word2 = "defgh";
string merged = "";

// 交替合并共同长度部分
for (int i = 0; i < word1.Length && i < word2.Length; i++)
{
    merged += word1[i];
    merged += word2[i];
}

// 追加剩余部分
if (word1.Length > word2.Length)
{
    merged += word1.Substring(word2.Length);
}
else
{
    merged += word2.Substring(word1.Length);
}

额外注意点

  • 字符串索引从0开始,循环条件要用<而非<=,否则会触发索引越界异常(比如word1长度为3,最大索引是2,i <= 3会取到i=3,导致word1[3]报错)。
  • 你提到处理剩余部分的代码没问题,只要修正循环部分,整体逻辑就能正常运行。

内容的提问来源于stack exchange,提问作者DMike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 14:36:13