标题
最长公共前缀
问题描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
题目要求
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i]
仅由小写英文字母组成
输入格式1
strs = ["flower","flow","flight"]
输出格式1
"fl"
输入格式2
strs = ["dog","racecar","car"]
输出格式2
""
解释:输入不存在公共前缀。
考察内容*
调用方法
循环嵌套
条件判断
解题思路*
1.先比较每一个元素的第一位字符
(从左到右多一位相同字符 n就加一)再比较每一位的第二个字符…
2.外循环表示每个元素的字符位置(从左边第一位开始 到 最短的数组元素的长度结束)
内循环表示数组中的每个元素
条件判断每个字符是否相等:
strs[0]第一位字符 与 strs[1]第一位字符 比较;
strs[0]第一位字符 与 strs[2]第一位字符 比较;
strs[0]第一位字符 与 strs[3]第一位字符 比较;
以此类推…
如果第一位字符都相等,那么n就清零,重新计数。
(不相等则退出循环)
核心代码*
class Solution {
public String longestCommonPrefix(String[] strs) {
char c = ' ';
int n = 0;
int Sum = 0;
for (int i = 0; i < strs_MinArray(strs); i++) {
// i=0 取第一位字符去比较
c = strs[0].charAt(i);
for (int j = 1; j < strs.length; j++) {
// strs[0]第一位字符 与 strs[1]第一位字符 比较。以此类推...
if (c == strs[j].charAt(i)){
// (n+1)从左到右表示多一位相同字符
n++;
}
}
if (n == strs.length-1){
n = 0;
Sum++;
}else {
break;
}
}
String s = strs[0].substring(0,Sum);
return s;
}
private int strs_MinArray(String[] strs) {
int min = strs[0].length()-1;
for (int i = 1; i < strs.length; i++) {
int b = strs[i].length()-1;
if (min>b){
min = b;
}
}
return min;
}
}