14. 最长公共前缀-leetcode

编写一个函数来查找字符串数组中的最长公共前缀。

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

示例 1:

复制代码
输入:strs = ["flower","flow","flight"]
输出:"fl"

示例 2:

复制代码
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。

提示:

  • 1 <= strs.length <= 200
  • 0 <= strs[i].length <= 200
  • strs[i] 如果非空,则仅由小写英文字母组成
cpp 复制代码
#include <vector>
#include <string>
using namespace std;

class Solution {
public:
    /**
     * @brief 查找字符串数组中所有字符串的最长公共前缀
     * @param strs 输入的字符串数组,存储待查找公共前缀的所有字符串
     * @return string 所有字符串的最长公共前缀;若不存在公共前缀或数组为空,返回空字符串
     */
    string longestCommonPrefix(vector<string>& strs) {
        int index = 0;          // 公共前缀的起始索引(固定为0,从字符串开头开始匹配)
        int rindex = 0;         // 记录当前匹配成功的公共前缀长度(即已匹配的字符个数)
        int n = strs.size();    // 字符串数组的长度(待匹配字符串的个数)

        // 边界处理1:若输入数组为空,直接返回空字符串(无字符串可匹配)
        if (n == 0) return "";

        int len = strs[0].size(); // 以数组第一个字符串为基准,获取其长度(作为匹配的最大边界)
        string str = strs[0];     // 取出第一个字符串作为基准字符串,后续所有字符串与它对比

        // 外层循环:遍历基准字符串的每个字符(从第0位开始)
        for (int i = 0; i < len; i++) {
            char a = str[i]; // 当前基准字符串的第i位字符(待匹配的目标字符)
            int flag = 0;    // 匹配标记:0表示当前字符匹配成功,1表示匹配失败

            // 内层循环:将基准字符与数组中其他所有字符串的第i位字符对比
            for (int j = 0; j < n; j++) {
                // 若当前字符串的第i位字符不存在(长度不足)或与基准字符不相等,标记匹配失败
                if (a != strs[j][i]) {
                    flag = 1;
                    break; // 无需继续对比其他字符串,直接退出内层循环
                }
            }

            // 若当前字符在所有字符串中均匹配成功,更新公共前缀长度
            if (!flag) {
                rindex++;
            } else {
                break; // 若匹配失败,后续字符无需再检查,退出外层循环
            }
        }

        // 边界处理2:若rindex仍为0,说明无任何公共前缀(仅匹配了0个字符),返回空字符串
        if (index == rindex) return "";

        // 截取公共前缀:从index(0)开始,长度为rindex(匹配成功的字符个数)
        string ans = str.substr(index, rindex);
        return ans; // 返回最长公共前缀
    }
};
相关推荐
groundhappy20 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
通信小小昕20 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
张小姐的猫21 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
国科安芯21 小时前
星间光链路:AS32S601型抗辐射MCU在空间激光通信终端控制中的技术实现
服务器·网络·单片机·嵌入式硬件·物联网·安全·信息与通信
栩栩云生1 天前
AI 写代码犯的错,早被写进了错题集
linux·安全·ai编程
imc.111 天前
linux基础IO
linux·运维·服务器
躺不平的理查德1 天前
让Ubuntu 的第二块网卡 ens37 永久固定为 192.168.30.111
运维·服务器
tachibana21 天前
hot100 数组中的第K个最大元素(215)
java·数据结构·算法·leetcode
bitbrowser1 天前
Facebook 验证反复回到原页面,应该从哪里排查
运维·服务器·facebook
糖果店的幽灵1 天前
langgraph的分支结构之 - 静态分支详解
java·服务器·数据库·langgraph