字符串数组中的最长公共前缀

描述:

给你一个大小为 n 的字符串数组 strs ,其中包含n个字符串 , 编写一个函数来查找字符串数组中的最长公共前缀,返回这个公共前缀。

数据范围: 0≤n≤5000, 0≤len(strsi​)≤5000

进阶:空间复杂度O(1),时间复杂度O(n∗len)

示例1:

输入:["abca","abc","abca","abc","abcc"]
返回值:"abc"

示例2:

输入:["abc"]
返回值:"abc"

解题思路:

首先是需要审题:

1. n 为字符串,n 可能为0,最大为5000

2. 字符串的长度len,len可能为0,最大为5000

3. 求最长的公共前缀,因为是公共前缀,所以,需要该前缀是每个字符串从第一个字符开始的所有字符都相同。

4. 时间复杂度为 O(n * len),即n 个字符串都轮询,字符串的每个字符都轮询,两重循环

代码:

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param strs string字符串一维数组
 * @param strsLen int strs数组长度
 * @return string字符串
 */
char* longestCommonPrefix(char** strs, int n ) {
    if (strs == NULL || n <= 0) {
        return "";
    }

    char* prefix = strs[0];
    char* nextStr = NULL;
    char* p = NULL;
    for (int i = 1; i < n; ++i) {
        p = prefix;
        nextStr = strs[i];
        while (*p != 0 && *nextStr != 0) {
            if (*p != *nextStr) {
                *p = 0;
                break;
            }
            p++;
            nextStr++;
        }
        *p = 0;
    }

    return prefix;
}

将第一个 字符串 作为参考,之后的每个字符串每个字符都逐一比较,如果出现字符不相等,则退出循环。

这里 prefix 这个字符串将作为返回的字符串,所以,原字符串可能被修改,但根据传入的参数非const,表示该入参是可以修改的。所以,当每次比较到不相等字符时,该 prefix 的最后一个比较字符会被置为 0,即被置上字符串的结束符,方便prefix的直接返回。

猜你喜欢

转载自blog.csdn.net/jingerppp/article/details/131302653
今日推荐