zoukankan      html  css  js  c++  java
  • [LeeCode]14. 最长公共前缀

    题目链接:https://leetcode-cn.com/problems/longest-common-prefix/

    题目描述:

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

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

    示例:

    示例 1:

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

    示例 2:

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

    说明:

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

    思路:

    思路1:

    python特性,取每一个单词的同一位置的字母,看是否相同.

    思路2:

    取一个单词s,和后面单词比较,看s与每个单词相同的最长前缀是多少!遍历所有单词

    思路3:

    按字典排序数组,比较第一个,和最后一个单词,有多少前缀相同.


    关注我的知乎专栏,了解更多解题方法!

    代码:

    python

    思路一:

    class Solution:
        def longestCommonPrefix(self, strs):
            """
            :type strs: List[str]
            :rtype: str
            """
            res = ""
            for tmp in zip(*strs):
                tmp_set = set(tmp)
                if len(tmp_set) == 1:
                    res += tmp[0]
                else:
                    break
            return res
    

    思路二:

    python

    class Solution:
        def longestCommonPrefix(self, s: List[str]) -> str:
            if not s:
                return ""
            res = s[0]
            i = 1
            while i < len(s):
                while s[i].find(res) != 0:
                    res = res[0:len(res)-1]
                i += 1
            return res
    

    java

    class Solution {
        public String longestCommonPrefix(String[] strs) {
            if (strs == null || strs.length == 0) return "";
            String res = strs[0];
            int i = 1;
            while (i < strs.length) {
                while (strs[i].indexOf(res) != 0) {
                    res = res.substring(0, res.length() - 1);
                }
                i += 1;
            }
            return res;
            
        }
    }
    

    思路三:

    python

    class Solution:
        def longestCommonPrefix(self, s: List[str]) -> str:
            if not s:
                return ""
            s.sort()
            n = len(s)
            a = s[0]
            b = s[n-1]
            res = ""
            for i in range(len(a)):
                if i < len(b) and a[i] == b[i]:
                    res += a[i]
                else:
                    break
            return res
    

    java

    class Solution {
        public String longestCommonPrefix(String[] strs) {
            if (strs == null || strs.length == 0) return "";
            StringBuilder res = new StringBuilder();
            Arrays.sort(strs);
            // 字符串转数组
            char[] a = strs[0].toCharArray();
            char[] b = strs[strs.length - 1].toCharArray();
            for (int i = 0; i < a.length; i++) {
                if (i < b.length && a[i] == b[i]) {
                    res.append(a[i]);
                }
                else{
                    break;
                }
            }
            return res.toString();
            
        }
    }
    
  • 相关阅读:
    SQL2008安装重启失败
    UML学习笔记
    强大的wget
    记录几款不错的chrome主题
    关于nginx配置的不完全总结
    关于Mac下的SSH客户端iterm2等配置
    安装配置sock5代理
    配置DNS
    复习一些编译原理
    了解CentOS及周边
  • 原文地址:https://www.cnblogs.com/powercai/p/10756841.html
Copyright © 2011-2022 走看看