【发布时间】:2021-11-29 19:26:46
【问题描述】:
我是新来的。我正在 Leetcode 上尝试关于最长公共前缀的 C# 问题。我知道这个问题已经解决了很多次。我只是很难理解为什么我的代码在某些条件下不起作用。当输入 ["flower","flow","flight"] 被输入时,它工作得很好并得到输出 "fl"。然而,当我输入 ["ab", "a"] 时,我突然得到一个 IndexOutOfRangeException。有谁知道为什么?这是我的代码:
public class Solution {
public string LongestCommonPrefix(string[] strs) {
StringBuilder sb = new StringBuilder();
int h = 1;
int count = 0;
if (strs.Length == 1){
return strs[0];
}
for (int i = 0; i<strs[0].Length; i++)
{
if ((strs[0])[i].Equals((strs[h])[i])){
count++;
if (h<strs.Length-1){
h++;
}
}
}
for (int j = 0; j < count; j++)
{
sb.Append((strs[0])[j]);
}
return sb.ToString();
}
}
【问题讨论】:
-
您对“h”变量做出了危险的假设。
-
你的逻辑对我来说似乎是错误的。我认为您需要某种嵌套循环,一个循环遍历
strs,一个循环遍历strs中每个元素中的字符。也许我不明白。 -
如果第一个字符串最短怎么办?
-
您还假设
strs至少有一个元素。它可能是空的。至少,我会添加一个断言来检查。 -
sb.Append((strs[0])[j]);您正在循环遍历strs[0]中的第一个count字符,并将它们作为单独的字符串添加到sb。这真的是你的意图吗?看看String.Substringdocs.microsoft.com/en-us/dotnet/api/…
标签: c# indexoutofrangeexception longest-prefix