GVKun编程网logo

查找列表的最长公共前缀的Python方法是什么?(python查找字符串最长公共前缀)

16

在这篇文章中,我们将为您详细介绍查找列表的最长公共前缀的Python方法是什么?的内容,并且讨论关于python查找字符串最长公共前缀的相关问题。此外,我们还会涉及一些关于14.最长公共前缀、14.最

在这篇文章中,我们将为您详细介绍查找列表的最长公共前缀的Python方法是什么?的内容,并且讨论关于python查找字符串最长公共前缀的相关问题。此外,我们还会涉及一些关于14. 最长公共前缀、14. 最长公共前缀-----leetcode刷题(python解题)、14.最长公共前缀、20190501-编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串的知识,以帮助您更全面地了解这个主题。

本文目录一览:

查找列表的最长公共前缀的Python方法是什么?(python查找字符串最长公共前缀)

查找列表的最长公共前缀的Python方法是什么?(python查找字符串最长公共前缀)

给定 :列表列表,例如[[3,2,1], [3,2,1,4,5], [3,2,1,8,9], [3,2,1,5,7,8,9]]

待办事项 :查找所有子列表中最长的公共前缀。

存在
:在另一个线程“两个列表之间的公共元素未使用Python中的集合”中,建议使用“计数器”,它在python
2.7以上可用。但是,我们当前的项目是用python 2.6编写的,因此未使用“ Counter”。

我目前这样编码:

l = [[3,2,1], [3,2,1,4,5], [3,2,1,8,9], [3,2,1,5,7,8,9]]newl = l[0]if len(l)>1:    for li in l[1:]:    newl = [x for x in newl if x in li]

但是我发现它不是很pythonic,有没有更好的编码方式?

谢谢!

新编辑 :抱歉,我的情况是,“
l”中列表的共享元素具有相同的顺序,并且始终从第0个项目开始。所以你不会有类似的情况[[1,2,5,6],[2,1,7]]

答案1

小编典典

我不确定它是pythonic的

from itertools import takewhile,izipx = [[3,2,1], [3,2,1,4,5], [3,2,1,8,9], [3,2,1,5,7,8,9]]def allsame(x):    return len(set(x)) == 1r = [i[0] for i in takewhile(allsame ,izip(*x))]

14. 最长公共前缀

14. 最长公共前缀

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

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

示例 1:

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

示例 2:

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

说明:

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

lass Solution {
    public String longestCommonPrefix(String[] strs) {
        
        int len = strs.length;
        
        //此时数组为空
        if(len == 0 ) 
            return "";
        
        //此时数组只有一个字符串
        if(len == 1) 
            return strs[0];
        
        //初始化 找出长度最小的字符串 作为比较目标
        int minIndex = 0;
        int minSize = strs[0].length();
        
        for(int i = 1; i < strs.length; i++) {
            if(minSize > strs[i].length()) {
                minSize = strs[i].length();
                minIndex = i;
            }
        }
        String temp="",temp1;
        int j ;
        for(int i = minSize; i >= 0; i--) {
            
             temp = strs[minIndex].substring(0,i);
            
            //比较开始
            for( j = 0; j < strs.length; j++) {
                temp1 = strs[j].substring(0,i);
                
                if(!temp1.equals(temp)) 
                    break;
            }
            
            if(j == strs.length) 
                return temp;
        }
        
        return "";
    }
}

 

C++:

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if(strs.size() == 0)
            return "";
        if(strs.size() == 1) 
            return strs[0];
        
        int minSize = strs[0].length();
        
        int minIndex = 0;
        
        for(int i = 0; i < strs.size(); i++) {
            if(minSize > strs[i].length()) {
                minSize = strs[i].length();
                minIndex = i;
            }
        }
        
        int j;
        string str1 = "";
        
        //逐个比较
        for(int i = 0; i < minSize; i++ ) {
            
            for(j = 0; j < strs.size(); j++) 
                if(strs[minIndex][i] != strs[j][i]) return str1;
            
            //表示该字符是公共的子串之一
            str1 += strs[minIndex][i];
        }
        
        return str1;
    }
};

 

14. 最长公共前缀-----leetcode刷题(python解题)

14. 最长公共前缀-----leetcode刷题(python解题)

[TOC]

题目

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

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

示例 1:

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

示例 2:

输入: ["dog","racecar","car"]
输出: ""

解释: 输入不存在公共前缀。
说明:

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

解答

先找到最短字符串的长度,这样能减少循环次数然后在进行循环找到公共前缀

class Solution(object):
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        a= 0
        num = []
        len_strs = len(strs)
        for i in strs:
            num.append(len(i))
        if num ==[]:
            return ""
        min_num = min(num)
        for i in range(min_num):
            for j in range(len_strs-1):
                
                if strs[j][i] != strs[j+1][i]:
                    break
            else:
                a +=1
                continue
            break
        return strs[0][:a]

执行效果

  • 执行结果:通过
  • 执行用时 :28 ms, 在所有 Python 提交中击败了79.27%的用户
  • 内存消耗 :12 MB, 在所有 Python 提交中击败了16.85%的用户

14.最长公共前缀

14.最长公共前缀

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

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

示例 1:

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

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

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

思路:既然是最长公共前缀,该前缀必须每个元素都含有,必须如果没有相同的前缀直接返回“”,

 

class Solution {
    public String longestCommonPrefix(String[] strs) {
        //数组长度为零,最长公共前缀无意义返回 "".
        if(strs.length==0)return "";
        if(strs.length==1)return strs[0];
        //非空时,第一个字符串赋值给pre。
        String pre=strs[0];
        for(int i=1;i<strs.length;i++){
            //如果没有找到前缀,直接退出。返回 ""。
            while(!strs[i].startsWith(pre)){
                pre=pre.substring(0,pre.length()-1);
                if(pre.length()==0)return "";
            }
        }
        return pre;
    }           
}

 

20190501-编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串

20190501-编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串

题目描述

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

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

示例 1:

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

输出: "fl"

示例 2:

输入: ["dog","racecar","car"]

输出: ""

解释: 输入不存在公共前缀。

考点

  1. 根据列表中的字符串长度排序
  2. 两层for循环的使用,for|else的使用

算法1

从下标0开始,判断每一个字符串同一索引所对应的值,判断是否全部相同。直到遇到不全部相同的时候return。

由于提供的单词长度不同,应该以最小单词为基准进行比较,如["flower","flow","flight"]中应该以flow来和剩下的单词一一对比。

  1. 所有单词同一索引所对应的值相等,则更新最长公共前缀
  2. 有一个单词与其他单词同一索引所对应的值不相等,则返回最后更新的最长公共前缀

代码1

def longestCommonPrefix(strs):
    """
    :type strs: List[str]
    :rtype: str
    """
    strs.sort(key =len)# 根据列表中的字符串长度排序
    if not strs:
        return ''''
    result = ''''#记录公共前缀
    for i in range(len(strs[0])):#以列表中长度最小的单词为基准进行遍历
        for j in strs:#遍历列表中的每个字符串
            if j[i] != strs[0][i]:#如果列表中的字符串的对应下标是否相同
                return result
        else:
            result += strs[0][i]#如果所有字符串下标都相同,更新最长公共前缀
    return result
print(longestCommonPrefix([""]))

算法2

利用python的max()和min(),在Python里字符串是可以比较的,按照ascII值排,举例abb,aba,abac,最大为abb,最小为aba。所以只需要比较最大最小的公共前缀就是整个数组的公共前缀

代码2

def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        s1 = min(strs)
        s2 = max(strs)
        for i,x in enumerate(s1):
            if x != s2[i]:
                return s2[:i]
        return s1

 

关于查找列表的最长公共前缀的Python方法是什么?python查找字符串最长公共前缀的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于14. 最长公共前缀、14. 最长公共前缀-----leetcode刷题(python解题)、14.最长公共前缀、20190501-编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串等相关内容,可以在本站寻找。

本文标签: