Leecode刷题之旅-C语言/python-14.最长公共前缀

/*
 * @lc app=leetcode.cn id=14 lang=c
 *
 * [14] 最长公共前缀
 *
 * https://leetcode-cn.com/problems/longest-common-prefix/description/
 *
 * algorithms
 * Easy (32.10%)
 * Total Accepted:    54.4K
 * Total Submissions: 169.3K
 * Testcase Example:  '["flower","flow","flight"]'
 *
 * 编写一个函数来查找字符串数组中的最长公共前缀。
 * 
 * 如果不存在公共前缀,返回空字符串 ""。
 * 
 * 示例 1:
 * 
 * 输入: ["flower","flow","flight"]
 * 输出: "fl"
 * 
 * 
 * 示例 2:
 * 
 * 输入: ["dog","racecar","car"]
 * 输出: ""
 * 解释: 输入不存在公共前缀。
 * 
 * 
 * 说明:
 * 
 * 所有输入只包含小写字母 a-z 。
 * 
 */

char* longestCommonPrefix(char** strs, int strsSize) {
    if(strsSize == 0) {
        return "";
    }
    int index = 0, i = 0;
    char flag = strs[0][index];
    while(flag) {
        for(i = 1; i < strsSize; i++) {
            if(strs[i][index] != flag)
                break;
        }
        if(i < strsSize)
            break;
        flag = strs[0][++index];
    }
    strs[0][index] = '';
    return strs[0];
}

这个函数有两个参数,一个是 strs指针的数字(可以理解为二维数组,行代表第n个字符串,列代表其中的第m个字符) strssize是字符串的个数(可以理解为这个二维数组的行数)

如果长度是0的话,那么直接放回空 即 " "即可。

然后flag为 第一个字符串中的第一个字符。循环条件是flag依旧存在。flag从第一个字符串的第一个字符循环到最后一位。

在这个循环中嵌套一个循环,此循环为循环字符串,即第二个字符串,第三个。。第四个。。 比对的都是相同的位置的字符。

如果出现了不相等的情况,就退出循环,如果此时的i小于字符串的个数,则说明 没有达到 公共前缀的要求 ,就退出整个大循环。

循环外把 第一个字符串的每循环到的位置的字符变为终结符。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

python:

#
# @lc app=leetcode.cn id=14 lang=python3
#
# [14] 最长公共前缀
#
# https://leetcode-cn.com/problems/longest-common-prefix/description/
#
# algorithms
# Easy (32.10%)
# Total Accepted:    54.4K
# Total Submissions: 169.3K
# Testcase Example:  '["flower","flow","flight"]'
#
# 编写一个函数来查找字符串数组中的最长公共前缀。
# 
# 如果不存在公共前缀,返回空字符串 ""。
# 
# 示例 1:
# 
# 输入: ["flower","flow","flight"]
# 输出: "fl"
# 
# 
# 示例 2:
# 
# 输入: ["dog","racecar","car"]
# 输出: ""
# 解释: 输入不存在公共前缀。
# 
# 
# 说明:
# 
# 所有输入只包含小写字母 a-z 。
# 
#
class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        if len(strs)==0:
            return ''
        if len(strs)==1:
            return strs[0]
        a = min(strs)    #这里是ascii码的大小
        b = max(strs)
        for i in range(len(a)):
            if a[i]!=b[i]:
                return a[:i]
        return a

这里运用了一个知识,min 和 max是求字符的ascii码大小,找出ascii码最小的和最大的,然后进行逐个比较。

原文地址:https://www.cnblogs.com/lixiaoyao123/p/10491417.html