最长公共前缀

184 阅读1分钟

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""。

示例 1:

输入: ["flower","flow","flight"]
输出: "fl"

示例 2:

输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。

说明:

所有输入只包含小写字母 a-z 。

public String longestCommonPrefix(String[] strs) {
    if( strs == null || strs.length < 1 ) return "";
    if( strs.length == 1 )  return strs[0];
      int min = Integer.MAX_VALUE;
      for( int i = 0 ;  i < strs.length; i++ ){
          min = Math.min( min , strs[i].length());
      } 
      for(int i = 1 ; i <= min; i++ ){
          String sub = strs[ 0 ].substring( 0 , i );
          for( int j = 1; j < strs.length;  j ++ ){
              if( ! strs[j].substring( 0 , i).equals( sub ) ){
                  return sub.substring( 0 , i -1);
              }
          }
      }
      return strs[0].substring(0 , min);
}

解体思路: 先求出数组中最短字符串的长度
从1 到 min 长度取子串, 如果出现子串不一致,则返回 当前长度减一的子串
如果全部都一样,则在最后返回长度为min的字串