package Level2;
import java.util.Arrays;
/**
* Longest Common Prefix
*
* Write a function to find the longest common prefix string amongst an array of strings.
*
*/
public class S14 {
public static void main(String[] args) {
String[] strs = {"bc", "bcaddf", "bca"};
System.out.println("->" + longestCommonPrefix(strs));
}
public static String longestCommonPrefix(String[] strs) {
if(strs.length == 0){
return "";
}
int minLen = strs[0].length();
int minIndex = 0;
// 先找出最小长度的string
for(int i=0; i<strs.length; i++){
if(strs[i].length() < minLen){
minLen = strs[i].length();
minIndex = i;
}
}
String s = strs[minIndex];
int endIndex = s.length();
int i;
// 暴力法查找
while(endIndex > 0){
String sub = s.substring(0, endIndex);
for(i=0; i<strs.length; i++){
if(!strs[i].substring(0, endIndex).equals(sub)){
break;
}
}
if(i == strs.length){
break;
}else{
endIndex--;
}
}
return s.substring(0, endIndex);
}
}
Rewrite:
public String longestCommonPrefix(String[] strs) {
if(strs.length == 0){
return "";
}
String first = strs[0];
int i, j;
boolean match = true;
for(i=0; i<first.length() && match; i++){
for(j=0; j<strs.length; j++){
if(i>=strs[j].length() || strs[j].charAt(i)!=first.charAt(i)){
match = false;
break;
}
}
if(!match){
return first.substring(0,i);
}
}
return first.substring(0,i);
}
public class Solution {
public String longestCommonPrefix(String[] strs) {
int len = strs.length;
if(len == 0) {
return "";
}
int minLen = strs[0].length();
String minStr = strs[0];
for(int i=0; i<len; i++) {
if(strs[i].length() < minLen) {
minLen = strs[i].length();
minStr = strs[i];
}
}
for(int i=0; i<minLen; i++) {
char c = minStr.charAt(i);
for(int j=0; j<len; j++) {
if(strs[j].charAt(i) != c) {
return minStr.substring(0, i);
}
}
}
return minStr;
}
}