解法一:纵向扫描
- 将字符串数组看作一个二维空间,每一次从第一列开始。
- 确定所有字符子串中第一列字符。
- 逐层扫描后面每一列,遇到不同字符停止扫描。
- 图解:
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 是字符串