【打卡】牛客网:BM84 最长公共前缀

自己写的:

题目要求时间复杂度是o(n*len),说明可以遍历所有的字符。

空间复杂度o(1),说明不能用字符串存储公共前缀,所以用下标来记录。

调试过程:

大概花了20min。

我调试前的做法是,在while循环中,从后往前遍历,用的j--。但是没有考虑到第0个字符串长度很小的问题。所以改成了j++。

cpp 复制代码
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param strs string字符串vector 
     * @return string字符串
     */
    string longestCommonPrefix(vector<string>& strs) {
        // write code here 
        int ans = 100000; //粗心,错误示范:ans = 0
        int n = strs.size();
        cout<<"n"<<n<<endl;
        if(n == 0)
            return "";
        if(n == 1)
            return strs[0];

        for(int i = 1; i < n; i++){
            int j = 0; 
            
            while(j < strs[0].size() && j < strs[i].size() && strs[0][j] == strs[i][j]) // 第0个字符串长度可能很小
                j++;

            // j为相同字符串的位置的后一个,或者为两个字符串中,短的字符串的长度   
            ans = min(ans, j); 
        }
    
        return strs[0].substr(0, ans); //粗心,左闭右开!
    }
};

模板的:

我采用的是,第一个字符串和后面每个字符串,二者逐次比较,即二者逐个字符进行比较。

模板的是,针对每个字符,从前往后,比较所有的字符串是否相同。

时间复杂度都是o(n*len)。

相关推荐
xlq223224 小时前
22.多态(上)
开发语言·c++·算法
666HZ6664 小时前
C语言——高精度加法
c语言·开发语言·算法
sweet丶4 小时前
iOS MMKV原理整理总结:比UserDefaults快100倍的存储方案是如何炼成的?
算法·架构
云里雾里!5 小时前
力扣 209. 长度最小的子数组:滑动窗口解法完整解析
数据结构·算法·leetcode
CoderYanger6 小时前
递归、搜索与回溯-穷举vs暴搜vs深搜vs回溯vs剪枝:12.全排列
java·算法·leetcode·机器学习·深度优先·剪枝·1024程序员节
憨憨崽&6 小时前
进击大厂:程序员必须修炼的算法“内功”与思维体系
开发语言·数据结构·算法·链表·贪心算法·线性回归·动态规划
chem41117 小时前
C 语言 函数指针和函数指针数组
c语言·数据结构·算法
liu****7 小时前
八.函数递归
c语言·开发语言·数据结构·c++·算法
CM莫问7 小时前
详解机器学习经典模型(原理及应用)——岭回归
人工智能·python·算法·机器学习·回归
DuHz7 小时前
论文阅读——Edge Impulse:面向微型机器学习的MLOps平台
论文阅读·人工智能·物联网·算法·机器学习·edge·边缘计算