zoukankan      html  css  js  c++  java
  • 【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中对变量的类型其实没有明确的定义,可以在参数和返回值时指定

  • 相关阅读:
    PyQt作品 – PingTester – 多点Ping测试工具
    关于和技术人员交流的一二三
    Pyjamas Python Javascript Compiler, Desktop Widget Set and RIA Web Framework
    Hybrid Qt applications with PySide and Django
    pyjamas build AJAX apps in Python (like Google did for Java)
    PyQt 维基百科,自由的百科全书
    InfoQ:请问为什么仍要选择Java来处理后端的工作?
    Eric+PyQt打造完美的Python集成开发环境
    python select module select method introduce
    GUI Programming with Python: QT Edition
  • 原文地址:https://www.cnblogs.com/szhb-5251/p/11758626.html
Copyright © 2011-2022 走看看