Leetcode Tencent 50 14. Longest Common Prefix
描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
1 | 输入: ["flower","flow","flight"] |
示例 2:
1 | 输入: ["dog","racecar","car"] |
来源:力扣(LeetCode)
链接:14. Longest Common Prefix
解题思路
本题的思路非常简单,依次遍历每个串的每一位的字符串是否相同。
首先定义一个临时的字符串指针变量,并用第一组的字符串进行初始化,然后逐个比较result变量各个字符与各组各个字符是否相等,并用一个计数器变量j进行计数,遇到不相等的字符退出循环。最后’\0’字符对字符串进行截断,只保留公共的前缀。
具体代码见解法一。
另外,本题也可以先对字符串进行排序,排序以后有共同字母多的两个字符串会被排到一起,而跟大家相同的字母越少的字符串会被挤到首尾两端,那么如果有共同前缀的话,一定会出现在首尾两端的字符串中,所以我们只需要找首尾字母串的共同前缀即可。
比如例子1排序后为 ["flight", "flow", "flower"],例子2排序后为 ["cat", "dog", "racecar"],虽然例子2没有共同前缀,但也可以认为共同前缀是空串,且出现在首尾两端的字符串中。由于是按字母顺序排的,而不是按长度,所以首尾字母的长度关系不知道,为了防止溢出错误,我们只遍历而这种较短的那个的长度,找出共同前缀返回即可。
具体代码见解法二。
代码
解法一
1 | char* longestCommonPrefix(char** strs , int strsSize) |
解法二
1 | //辅助比较函数,取最小值 |