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
相关产品推荐
相关产品推荐

