14.最长公共前缀-力扣(LeetCode)

题目:

解题思路:

解决本题的关键点是确定扫描的方式,大体上有两种方式:横向扫描和纵向扫描。

1、横向扫描:首先比较第一个字符串和第二个字符串,记录二者的公共前缀,然后用当前公共前缀与下一个字符串再次比较得出新的公共前缀,重复过程,直到所有字符串完成比较,或者中间过程中得到的公共前缀为空串时停止并返回。

2、纵向扫描:共进行k轮比较(k大小不超过第一个字符串的长度,因为最长公共前缀不可能比传入的字符串还长)。在每一轮比较中,对所有字符串的第k位进行比较,如果出现不同,证明当前比较位前面的字符串为最长公共前缀,对最长公共前缀进行返回,否则比较下一轮。完成所有轮比较后,仍要进行一次返回,此时每个字符串及最长公共前缀都相同。

在函数中,采用纵向扫描。动态开辟了空间用作返回最长公共前缀,这块空间的大小没有去求字符串的长度来决定,根据提示中的信息,取了一个长度最大值200,能够满足所有情况。这里利用将返回地址中提前存入第一个字符串、过程中判断并修改'\0'来实现对最长公共前缀的存储。

代码:

cpp 复制代码
char *longestCommonPrefix(char **strs,int strsSize)
{
    if(strsSize == 0){return "";}
    char *returnStr = (char *)malloc(200);
    strcpy(returnStr,strs[0]);
    for(int j = 0; j < strlen(strs[0]); j++)
    {
        for(int i = 1; i < strsSize; i++)
            {
                if(returnStr[j] != strs[i][j])
                {
                    returnStr[j] = '\0';
                    return returnStr;
                }
            }
    }
    return returnStr;
}
相关推荐
罗超驿19 分钟前
双指针算法经典案例:LeetCode 283. 移动零(Java详解)
java·算法·leetcode
人道领域27 分钟前
【数据结构与算法分析】二叉树面试通关手册:遍历图解 · 分类对比 · 代码模板
数据结构·算法·leetcode·深度优先
水蓝烟雨28 分钟前
2901. 最长相邻不相等子序列 II
算法·leetcode
承渊政道36 分钟前
【动态规划算法】(回文串问题解题框架与经典案例)
数据结构·c++·学习·算法·leetcode·动态规划·哈希算法
We་ct6 小时前
LeetCode 5. 最长回文子串:DP + 中心扩展
前端·javascript·算法·leetcode·typescript
leoufung12 小时前
LeetCode 149: Max Points on a Line - 解题思路详解
算法·leetcode·职场和发展
样例过了就是过了12 小时前
LeetCode热题100 最长公共子序列
c++·算法·leetcode·动态规划
样例过了就是过了15 小时前
LeetCode热题 不同路径
c++·算法·leetcode·动态规划
Navigator_Z16 小时前
LeetCode //C - 1031. Maximum Sum of Two Non-Overlapping Subarrays
c语言·算法·leetcode
如何原谅奋力过但无声18 小时前
【灵神高频面试题合集01-03】相向双指针、滑动窗口
数据结构·python·算法·leetcode