题目描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例 2:
输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
题目分析
将输入的字符串保存在字符串数组中,依次比较字符串的每一位。
-1-
flower
flow
flight
-2-
flower
flow
flight
-3-
flower
flow
flight
算法结束,最长公共前缀是“fl”
源代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class LongestCommonPrefix {
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] strs = null;
try {
strs = br.readLine().split(",");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
LongestCommonPrefix lcp = new LongestCommonPrefix();
System.out.println(lcp.longestCommonPrefix(strs));
}
public String longestCommonPrefix(String[] strs) {
String str = "";
int minlen = 1000;
//字符数组为空或长度为0,直接返回
if(strs == null || strs.length == 0)
return "";
for(int i = 0; i < strs.length; i++) {
if(minlen > strs[i].length()) {
minlen = strs[i].length();
}
}
// System.out.println("minlen="+minlen);
boolean flag = true;
int len = strs.length;
int tmp = minlen;
// System.out.println("len="+len);
for(int i = 0; i < minlen; i++) {
for(int j = 0; j < len-1; j++) {
// System.out.println((String)strs[j].substring(i, i+1) != (String)strs[j+1].substring(i, i+1));
String str1 = strs[j].substring(i, i+1);
String str2 = strs[j+1].substring(i, i+1);
// System.out.println("str1="+str1);
// System.out.println("str2="+str2);
if(!str1.equals(str2)) {
flag = false;
tmp = i;
break;
}
}
if(!flag)
break;
}
str = (String) strs[0].subSequence(0, tmp);
// System.out.println("tmp="+tmp);
// System.out.println("str="+str);
return str;
}
}
评论区看到的大神解法
public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0 ) return "";
String reg = strs[0];
for (String str : strs){ //把strs数组里的元素依次赋给str
while (!str.startsWith(reg)) {//startsWith()方法用于检测字符串是否以指定的前缀开始
if (reg.length() == 1) {
return "";
}
reg = reg.substring(0, reg.length()-1);
}
}
return reg;
}
运行结果如下:
运行结果
总结
1.Java中不能用“==”判断两个字符串是否相等,容易出现问题。比如
String a = "abc";
String b = "abc";
此时a==b返回true,Java中字符串值不可改变,内存中只存一份,a和b指向同一个对象。
String a = new String("abc");
String b = new String("abc");
此时a==b返回false,a和b指向不同的对象。
因此,Java中使用equals()方法判断两个字符串是否相同。
2.菜弟弟一枚,暴力方法真的野蛮了,多学习大神解法。