package com.practice.字符串;
/**
* 编写一个函数来查找字符串数组中的最长公共前缀。
* 如果不存在公共前缀,返回空字符串 ""。
*/
/**
* 输入:strs = ["flower","flow","flight"]
* 输出:"fl"
*/
public class 最长公共前缀 {
public static void main(String[] args) {
String[] strs = new String[]{"ab", "a"};
dealPrefix(strs);
}
/**
* 自己实现
*/
public static String dealPrefix(String[] strs) {
if (strs.length == 0) {
return "";
}
boolean isGo = true;
String str1 = strs[0];
int i = 0;
for (; i < str1.length(); i++) { //取数组第一个数作为标准 ,然后一个字一个字判断
char ch1 = str1.charAt(i); //
for (int j = 1; j < strs.length; j++) { //循环数组余下的字段,然后取每个字段里面的字对比
if (i >= strs[j].length()) { //长度不够,直接失败
isGo = false;
break;
}
char tmp = strs[j].charAt(i);
if (ch1 != tmp) { //字不一样,直接失败
isGo = false;
break;
}
}
if (!isGo) { //不一样了,跳出循环
break;
}
}
if (!isGo) {
str1 = str1.substring(0, i);
System.out.println(str1);
}
return str1;
}
/**
* leetcode 参考答案:代码优雅些
*/
public static String longestCommonPrefix(String[] strs) {
if (strs.length == 0) {
return "";
}
String ans = strs[0];
for (int i = 1; i < strs.length; i++) {
int j = 0;
for (; j < ans.length() && j < strs[i].length(); j++) {
if (ans.charAt(j) != strs[i].charAt(j)) {
break;
}
}
ans = ans.substring(0, j);
if (ans.equals("")) {
return ans;
}
}
return ans;
}
}
自己实现了一版,代码不够简洁优雅。能通过 leetCode 提交。
想法思路都在代码注释了:主要是取第一个字符串作为标准,然后挨个取其他字符串比较