题目

image.png

思路

  • 思路一:前缀树构建公共前缀
  • 思路二:横向扫描:前两个字符串找公共子串,将其结果和第三个字符串找公共子串……直到最后一个串。时间性能为O(n*m)。

    代码

    ```java //前缀树 Map map = new HashMap<>(); public String longestCommonPrefix(String[] strs) {
    1. for (String s : strs) {
    2. if (s.length() == 0) return "";
    3. Map<Character, Solution> p = map;
    4. for (int i = 0; i < s.length(); i++) {
    5. char ch = s.charAt(i);
    6. p.putIfAbsent(ch, new Solution());
    7. p = p.get(ch).map;
    8. if (i == s.length() - 1) p.put('#', new Solution());
    9. }
    10. }
    11. StringBuilder res = new StringBuilder("");
    12. while (map != null && map.size() == 1) {
    13. char key = ' ';
    14. for (char ch : map.keySet()) {
    15. key = ch;
    16. }
    17. if (key == '#') break;
    18. res.append(key);
    19. map = map.get(key).map;
    20. }
    21. return res.toString();
    } //横向扫描 public String longestCommonPrefix(String[] strs) {
      if (strs.length == 0) return "";
      String ans = strs[0];
      for(int i =1;i<strs.length;i++) {
          int j=0;
          for(;j<ans.length() && j < strs[i].length();j++) {
              if(ans.charAt(j) != strs[i].charAt(j))
                  break;
          }
          ans = ans.substring(0, j);
          if(ans.equals(""))
              return ans;
      }
      return ans;
    
    }

``` 最长公共前缀