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; // 返回最长公共前缀
    }
};
相关推荐
一个在高校打杂的4 分钟前
honeypot之opencanary(轻量化蜜罐)
linux·网络安全·网络攻击模型·安全威胁分析·策略模式
大明者省5 分钟前
Ubuntu22.04 宝塔面板与 XFCE 远程桌面端口兼容性分析
运维·服务器·数据库·笔记
s_w.h10 分钟前
【 linux 】认识make和makefile
linux·运维·bash
不怕犯错,就怕不做22 分钟前
ARM设备异常断电容易造成数据损坏,硬件如何设计
linux·驱动开发·嵌入式硬件
Harm灬小海26 分钟前
【云计算学习之路】学习Centos7系统-Linux软件包管理
linux·运维·服务器·学习·云计算·yum·rpm
1892280486128 分钟前
NY379固态MT29F32T08GSLBHL8-36QA:B
大数据·服务器·人工智能·科技·缓存
叶小鸡29 分钟前
小鸡玩算法-力扣HOT100-动态规划(上)
算法·leetcode·动态规划
caicai_xiaobai29 分钟前
Ubuntu上Git安装步骤
linux·git·ubuntu
平行云39 分钟前
实时云渲染平台数据通道,支持3D应用文件上传下载分享无缝交互
linux·unity·云原生·ue5·gpu算力·实时云渲染·像素流送
凌波粒1 小时前
LeetCode--513.找树左下角的值(二叉树)
java·算法·leetcode