- 已关闭。**此问题不符合Stack Overflow guidelines。当前不接受答案。
这个问题似乎与help center中定义的范围内的编程无关。
6天前关闭。
Improve this question
编写一个函数来查找字符串数组中最长的公共前缀字符串。
如果没有公共前缀,则返回空字符串""。
输入:strs = ["flower","flow","flight"]
输出:"fl"
public static String longestCommonPrefix(String[] strs) {
String common="";
for(int i=0; i<strs.length-1; i++){
if(strs[i].charAt(i)==strs[i+1].charAt(i)){
common+=strs[i].charAt(i);
} else
return common;
}
return common;
}
我的代码确实适用于这种情况,但当我尝试只使用两个时,例如,如果我输入
["flower","flow"];
我刚得到f共同。我不知道我错了哪一部分。有人能帮忙吗?
3条答案
按热度按时间mf98qq941#
另一个变体是逐个字符而不是使用StartsWith():
2ul0zpep2#
首先假设数组中的第一个元素是公共前缀。然后循环数组的其余部分。它使用嵌套的
for
循环将prefix
与数组中的索引元素进行比较。它逐字符进行比较,直到找到差异。如果/当找到差异时,它缩短prefix
。我没有使用
startsWith
中的一个,而是逐个字符地进行,因为如果startsWith
返回false
,我将需要额外的代码来为prefix
找到更短的长度。prefix
的长度永远不能增加,因此,外部for
循环中的继续表达式包含&& prefix.length() > 0
,如果prefix
的长度已经达到零,则确定没有公共前缀,因此循环不需要继续。bt1cpqcv3#
请注意下面的代码如何确保检查所有字符串,而不仅仅是连续的字符串: