力扣练习题——最长公共前缀

package com.shengda.Demo0Likou;

public class Demo14 {
          
   
    public static void main(String[] args) {
          
   
        Solution s = new Solution();
        String[] strs = new String[]{
          
   "ab","ab"};
        String str = s.longesCommonPrefix(strs);
        System.out.println(str);
    }
}

class Solution{
          
   
    public String longesCommonPrefix(String[] strs) {
          
   
        if(strs.length == 0){
          
   
            return "";
        }
        int j = 0;
        String str = strs[0];
        // 查找到最短的字符串
        for (int i = 0; i < strs.length; i++) {
          
   
            if ("".equals(strs[i])) return "";  // 如果有一个字符串为空,就直接返回为""
            if (strs[i].length()<str.length()) str = strs[i];  // 将比自身短的字符串赋值给str
        }
        while (getCommon(strs,str,j)) {
          
     // 如果返回值为true就j++, 这里通过j来记录有几个相同的字符
            j++;
        }
        return str.substring(0,j);  // 将字符串进行切割返回
    }

    // 通过此方法来比较有字符
    private boolean getCommon(String[] strs, String str,int j) {
          
   
        for (int i = 0; i < strs.length; i++) {
          
     // 遍历所有字符串
            /*
            * j == str.length()表示如果j等于最短的字符串的长度+1,如果此时不结束,就会报错,因为str字符串没有第j个字母,所以这时直接返回false让while循环结束
            * strs[i].charAt(j) != str.charAt(j)  j表示比较的是第几个字母,如果都相同,就会返回true,在while循环里j就会加一,然后遍历第二个字母。
            * */
            if (j == str.length() || strs[i].charAt(j) != str.charAt(j))
            return false;
        }
        return true;
    }
}
经验分享 程序员 微信小程序 职场和发展