iOS算法系列(四)--最长公共前缀

难易度:易
题目:编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""。

示例 1:

输入: ["flower","flow","flight"]
输出: "fl"

示例 2:

输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。

思路:
1:遍历整个数组查询字符串最短的那个
2:得到最短字符串的长度,按照此长度截取第一个字符串,依次遍历剩下的字符串,每个字符串都按照此长度截取,然后对比,如果不相同,马上跳出
3:将最短字符串的最后一位抛弃,重复步骤2
4:得到结果

-(NSString*)longestCommonPrefix:(NSArray*)stringArray
{
    if (stringArray.count == 0)
    {
        return @"";
    }
    else if (stringArray.count == 1)
    {
        return stringArray[0];
    }
    NSString *minString = stringArray[0];
    
    for (NSInteger i = 1; i < stringArray.count; i++)
    {
        NSString *temp = stringArray[i];
        if (temp.length < minString.length)
        {
            minString = temp;
        }
    }
    NSInteger minLen = minString.length;
    minString = stringArray[0];
    NSString *temp;
    NSInteger common = 1;//用来记录是否所有的字符串都用相同的前缀
    while (minLen > 0)
    {
        common = 1;//重置
        minString = [minString substringWithRange:NSMakeRange(0, minLen)];
        for (NSInteger i = 1; i < stringArray.count; i++)
        {
            temp = [stringArray[i] substringWithRange:NSMakeRange(0, minLen)];
            if (![minString isEqualToString:temp])
            {
                break;
            }
            else
            {
                common++;
            }
        }
        if (common == stringArray.count)//判断累计的次数是否和数组长度相同,如果相同就是为公共前缀
        {
            return minString;
        }
        minLen--;
    }
    return @"";
}

你可能感兴趣的:(iOS算法系列(四)--最长公共前缀)