📜  C++ 程序通过单词匹配找到最长的公共前缀(1)

📅  最后修改于: 2023-12-03 15:14:01.416000             🧑  作者: Mango

C++ 程序通过单词匹配找到最长的公共前缀

本文将介绍一种使用 C++ 语言编写的算法,实现在一组单词中寻找最长的公共前缀。该算法的时间复杂度为 $O(nk)$,其中 $n$ 为单词数量,$k$ 为单词中最长的字符长度。

算法思路

我们可以先取第一个单词作为参照。然后依次遍历其他单词的每个字符,与参照单词相应位置进行比较。若全都匹配,则将该字符存入结果字符串中。若不匹配,则说明前缀已经不同,算法停止并返回结果字符串。

代码实现

下面是代码的具体实现。我们用字符串类型 string 存放单词,使用字符串的 size() 方法获取字符串的长度。

/**
 * @brief 通过单词匹配找到最长的公共前缀
 * @param words 单词数组
 * @return 最长的公共前缀
 */
string longestCommonPrefix(vector<string>& words) {
    string prefix = words[0];
    for (int i = 1; i < words.size(); i++) {
        for (int j = 0; j < prefix.size(); j++) {
            if (words[i][j] != prefix[j]) {
                prefix.resize(j);
                break;
            }
        }
    }
    return prefix;
}
代码说明

函数 longestCommonPrefix 的参数 words 是一个字符串类型的数组,存放所有的单词。我们首先取第一个单词作为参照,然后遍历其他单词,比较每个单词与参照单词对应位置的字符是否相同。

如果相同,则将该字符存入结果字符串中;如果不同,则说明前缀已经不同,算法停止并返回结果字符串。

需要注意的是,为了便于处理,我们使用 prefix.resize(j) 方法将结果字符串的长度调整为当前匹配到的位置 $j$。这样可以使后续循环中的无效比较避免。

总结

通过本文的介绍,我们了解了如何使用 C++ 语言编写一段用于寻找最长的公共前缀的算法。这个算法利用了循环与字符串类型的一些方法,效率较高且代码简洁易懂。如有任何问题,欢迎在评论区留言。