/* * @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] = '\0'; 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码最小的和最大的,然后进行逐个比较。