法一:纵向扫描比较

import java.util.*;


public class Solution {
    /**
     * 
     * @param strs string字符串一维数组 
     * @return string字符串
     */

    public String longestCommonPrefix(String[] strs) {
 if (strs.length == 0) {  // 特殊情况:数组为空
                return "";
            }
            StringBuffer lcp = new StringBuffer();
            // 遍历字符串数组,找到最短的字符串,记录其长度
            int len = Integer.MAX_VALUE;
            for (int i = 0; i < strs.length; i++) {
                if (len > strs[i].length()) {
                    len = strs[i].length();
                }
            }
            // 比较每一行的字符串的第j的字符是否相同
            for (int j = 0; j < len; j++) {
                boolean flag = true;   // 记录每一行某一列的元素是否相同
                char c = strs[0].charAt(j); // 设定第一行的
                for (int i = 0; i < strs.length; i++) {    // 遍历字符串数组
                    if (strs[i].charAt(j) != c) {
                        flag = false;
                        break;
                    }
                }
                if (flag) {
                    lcp.append(c);
                } else {
                    break;
                }
            }
            return lcp.toString();
    }

}

法二:利用startsWith(String prefix)

class Solution {
    public String longestCommonPrefix(String[] strs) {
        if(strs.length == 0) {  // 特殊情况:数组为空
            return "";
        }
        String lcp = strs[0];   // 假定第一个字符串为最长公共前缀
        for(int i = 1 ; i < strs.length ; i++) {    // 遍历字符串数组
            while(!strs[i].startsWith(lcp)) {
                if(lcp.length() == 0) {     // 特殊情况:最长公共前缀长度为0
                    return "";
                }
                lcp = lcp.substring(0,lcp.length()-1);  // 不匹配就把公共前缀缩短
            }
        }
        return lcp;
    }
}