zoukankan      html  css  js  c++  java
  • Leetcode算法练习篇七:最长公共子串

    问题描述

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

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

    示例 1:

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

    示例 2:

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

    说明:

    所有输入只包含小写字母 a-z

    解法一

    以最短串为基础,遍历该串,依次对比每个位置上的字符是否相同。假设共有m个串,最短串长为n;则寻找最短串需O(m)时间,遍历m个串最多n次,故最坏时间复杂度O(m*n)。空间复杂度O(1)。

    Python 代码:

    class Solution:
        def longestCommonPrefix(self, strs: List[str]) -> str:
            if len(strs) == 0:
                return ''
            if len(strs) == 1:
                return strs[0]
    
            prefix, chars = '', zip(*strs)
            for i, group in enumerate(chars):
                ch = group[0]
                for j in range(1, len(group)):
                    if group[j] != ch:
                        return prefix
                prefix += strs[0][i]
            return prefix       
    

    C++代码:

    static const auto io_sync_off=[](){std::ios::sync_with_stdio(false);std::cin.tie(nullptr);return nullptr;}();
    
    class Solution {
    public:
        string longestCommonPrefix(vector<string>& strs) {
            if(size(strs)<1) return "";
            if(size(strs)==1) return strs[0];
            
            string min_str=strs[0];
            int min_len=size(strs[0]);
            for(int i=0;i<size(strs);i++){
                if(size(strs[i])<1) return "";
                if(size(strs[i])<min_len){
                    min_str=strs[i];
                    min_len=size(strs[i]);
                }       
            }
            for(int i=0;i<min_len;i++){
                for(int j=0;j<size(strs);j++){
                    if(i>size(strs[j])-1 || strs[j][i]!=strs[0][i])
                        return min_str.substr(0,i);
                }            
            }
            return min_str;
        }
    };
    
  • 相关阅读:
    从 i++ 和 ++i 说起局部变量表和操作数栈
    数据库连接情况查询相关sql语句
    db2相关语句
    BeanUtils源码详解
    Spring注解驱动开发之AOP
    Spring注解驱动开发之IOC
    正则表达式
    linux特殊符号
    linux下面如何让一个软件/命令开机自启动
    linux文件属性
  • 原文地址:https://www.cnblogs.com/yczha/p/13160194.html
Copyright © 2011-2022 走看看