class Solution {
public String longestCommonPrefix(String[] strs) {
String result = new String("");
char compareElement;
int i;//index of strs
int j;//index of the first one of string
for(j = 0; j < strs[0].length(); j++){
compareElement = strs[0].charAt(j);
for(i = 1; i < strs.length; i++){
if(compareElement == strs[i].charAt(j)){
if(i == strs.length - 1)
result += compareElement;
else
continue;
}
else{
break;
}
}
}
return result;
}
}
测试样品是
Input: ["flower","flow","flight"]
Output: "fl"
嗨,我在Leetcode的第四个小程序中遇到了Java字符串问题。此功能的目的是在字符串数组中找到最长的公共前缀字符串。但是例外
Exception in thread "main"
java.lang.StringIndexOutOfBoundsException: String index out of
range: 4
at java.lang.String.charAt(String.java:614)
at Solution.longestCommonPrefix(Solution.java:11)
at __DriverSolution__.__helper__(__Driver__.java:4)
再次出现。 有人知道吗?谢谢!
答案 0 :(得分:0)
我认为这是您出问题的地方:
if(compareElement == strs[i].charAt(j))
j
从0
到strs[0].lenght()
可能会变得太大(请参阅外部循环)。
如果strs[i].lengt()
小于strs[0].length()
,则会得到StringIndexOutOfBoundsException
。
答案 1 :(得分:0)
当您遍历比较字符串时,您永远不会检查要比较的字符串的长度。在您的示例中,测试用例flow
。索引4处的char不存在,因为仅定义了索引0-3。 if(compareElement == strs[i].charAt(j)){
当j为4时会混乱。为了修复它,您必须确保不超过字符串的长度。除了查找StringBuilder是什么之外,对于这么小的测试用例,也没有关系,但是随着您的增大,它会变得越来越重要。
答案 2 :(得分:0)
如果数组中的元素比第一个元素短,则您的代码将失败。您需要检查j是否仍小于要比较的字符串的长度:
public String longestCommonPrefix(String[] strs) {
String result = new String("");
char compareElement;
int i;// index of strs
int j;// index of the first one of string
for (j = 0; j < strs[0].length(); j++) {
compareElement = strs[0].charAt(j);
for (i = 1; i < strs.length; i++) {
if (j < strs[i].length() && compareElement == strs[i].charAt(j)) {
if (i == strs.length - 1)
result += compareElement;
else
continue;
} else {
break;
}
}
}
return result;
}