解法一:纵向扫描

  • 将字符串数组看作一个二维空间,每一次从第一列开始。
  • 确定所有字符子串中第一列字符。
  • 逐层扫描后面每一列,遇到不同字符停止扫描。
  • 图解:
  • 图片说明

Java参考代码:

import java.util.*;


public class Solution {
    /**
     * 
     * @param strs string字符串一维数组 
     * @return string字符串
     */
    public String longestCommonPrefix (String[] strs) {
        // //纵向扫描
        if(strs.length==0 || strs==null){
            return "";
        }

        int rows = strs.length;
        int cols = strs[0].length();
        //开始扫描
        for(int i=0;i<cols;i++){
            char firstChar = strs[0].charAt(i);
            for(int j=1;j<rows;j++){
                if(strs[j].length()==i || strs[j].charAt(i)!=firstChar){
                    return strs[0].substring(0,i);
                }
            }
        }
        return strs[0];
    }
}

复杂度分析:

时间复杂度:O(M*N) 其中 M 是字符串