• 【LC_Lesson5】---求最长的公共前缀


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

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

    示例 1:

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

    示例 2:

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

    一.解题思路

      1) 采用反向思维,将第一个字符串作为基准串,然后使用两层循环,第一层扫描str[0][0:m]的每个元素,第二层,判断str[1:n]每个字符串的每个元素与str[0]是否相等,不等就返回退出

      2) leetcode评论区有人会先找整个输入中最短的那个字符串,然后再去比较,这样避免了扫描时,由于基准串长,其他串短而导致的越界错误问题。为了简略代码,其实可以不用这样做,只需要判断当前下标是否已经到达某个字串的上限,如果到达 ,立即返回即可。C++中应该是不需要,因为C++字符串的结尾有个’‘,遇到’‘时判断也会不相等直接返回即可,但是Python中字符串貌似没有'',因此python代码需要加该条件的判断。

    二.代码实现

    C++实现

     1 string Solution::LongestCommonPrefix(vector<string> &str)
     2 {
     3     if(str.empty()||str[0].empty()) 
     4         return "";
     5     int key_i = 0;
     6     for(key_i=0; key_i<str[0].size(); key_i++){ 
     7         for(int index=1; index<str.size(); index++){
     8             if(str[index][key_i]!= str[0][key_i]){
     9                 goto Exit;    //just to exit the Double loop
    10             }
    11         }
    12     }
    13     Exit:
    14     return (key_i==0)?"":str[0].substr(0,key_i);
    15 }

    经验贴士:

      1) 学习到了vector向量的简单使用方法,待扩展

      2) 了解到了一种退出多层循环的方式,一般来说采用goto也是一种不错的方式,但是必须保证goto仅有这个一处应用,goto作为一个强大而又可以胡作非为的用法,还是少用为主

      3) 学到了string的简单用法,包括定义一个空字串可以不用赋值,string的函数也不可以返回NULL,待扩展

      4) 一种寻找公共字符串时所需要考虑的反向思维,正向思维深度比较深,我们直接考虑反向思维的状况。

    Python实现

    1 class Solution:
    2     def longestCommonPrefix(self, strs)->str:
    3         if len(strs) == 0 or len(strs[0]) == 0:
    4             return ""
    5         for i in range(len(strs[0])):
    6             for j in range(1,len(strs)):
    7                 if i >= len(strs[j]) or strs[0][i] != strs[j][i]:
    8                     return strs[0][0:i]
    9         return strs[0]

    经验贴士:

      1)  python中在定义类的方法时,self代表类的实例,self在定义类的方法时必须有,即使不必传入相应的参数

      2)python中没有指针的概念,因此空字符串的表示直接返回""即可

      3)  range使用的一些大概方法

      4)  python中对变量的类型其实没有明确的定义,可以在参数和返回值时指定

  • 相关阅读:
    【安卓本卓】Android系统源码篇之(一)源码获取、源码目录结构及源码阅读工具简介
    【朝花夕拾】Android性能篇之(六)Android进程管理机制
    【烂笔头】adb命令篇
    【朝花夕拾】Android性能篇之(五)Android虚拟机
    【朝花夕拾】Android性能篇之(一)序言及JVM
    【烂笔头】git常用命令篇
    【朝花夕拾】Android性能篇之(四)Apk打包
    【朝花夕拾】Android Log篇
    从2015年百度站长的一则公告回头看百度的骚操作
    ASP.NET Core+Quartz.Net 实现web定时任务
  • 原文地址:https://www.cnblogs.com/szhb-5251/p/11758626.html
Copyright © 2020-2023  润新知