• 【LeetCode】14. Longest Common Prefix


    Write a function to find the longest common prefix string amongst an array of strings.

    题意:找出所给几个字符串的相同前缀

    思路:用第一个字符串和之后的所有字符串进行对比,标示出相同字符串的超尾指针就行

    ps:通过这个题发现自己Python基础好差啊

     1 class Solution(object):
     2     def longestCommonPrefix(self, strs):
     3         """
     4         :type strs: List[str]
     5         :rtype: str
     6         """
     7         if len(strs)==0: return ''
     8         str = strs[0]
     9         min = len(str)
    10         for i in range(1, len(strs)):
    11             j=0
    12             tmp = strs[i]
    13             while j<min and j<len(tmp) and str[j] == tmp[j]:
    14                 j+=1
    15             if j<min: min = j
    16         
    17         return str[:min]

     耗时84ms,排名太靠后了,不能忍

     1 class Solution(object):
     2     def longestCommonPrefix(self, strs):
     3         """
     4         :type strs: List[str]
     5         :rtype: str
     6         """
     7         if len(strs)==0: return ''
     8         str = strs[0]
     9         min = len(str)
    10         for tmp in strs[1:]:
    11             j=0
    12             while j<min and j<len(tmp) and str[j]==tmp[j]:
    13                 j+=1
    14             if j<min: min=j
    15         
    16         return str[:min]

     耗时59ms,好了点,但还是不理想

     1 class Solution(object):
     2     def longestCommonPrefix(self, strs):
     3         """
     4         :type strs: List[str]
     5         :rtype: str
     6         """
     7         if len(strs)==0: return ''
     8         str = strs[0]
     9         min = len(str)
    10         for tmp in strs[1:]:
    11             j = 0
    12             l = len(tmp)
    13             while j<min and j<l and str[j]==tmp[j]:
    14                 j+=1
    15             if j<min: min=j
    16         
    17         return str[:min]

    把重复计算的min = len(str)保存后,变成了49ms,len()耗时挺长啊,感觉还能继续改

     1 class Solution(object):
     2     def longestCommonPrefix(self, strs):
     3         """
     4         :type strs: List[str]
     5         :rtype: str
     6         """
     7         if len(strs)==0: return ''
     8         str = strs[0]
     9         min = len(str)
    10         for tmp in strs[1:]:
    11             j = 0
    12             l = len(tmp)
    13             while j<min and j<l and str[j]==tmp[j]:
    14                 j+=1
    15             min=j     #不用判断,j的值肯定小于min,直接更新
    16         
    17         return str[:min]

    又减了4ms

    感觉还能改,但是不知道怎么改了。。。

    没办法,

    只有这样了。。

    !!!!

    0ms

     1 char* longestCommonPrefix(char** strs, int strsSize) {
     2     if(!strsSize) return "";
     3     char *str=strs[0];
     4     int i,j;
     5     for(i=1;i<strsSize;i++){
     6         j=0;
     7         while(str[j]&&strs[i][j]&&str[j]==strs[i][j])
     8             j++;
     9         str[j]='';
    10     }
    11     return str;
    12 }
  • 相关阅读:
    第二次:Ubuntu16.04 安装Docker
    第一次:从今开始玩Linux,Ubuntu16.04
    学习日常
    Vector和ArrayList的异同、Hashtable和HashMap的异同
    如何吃透Python的面向对象(OOP)
    Python基础(下篇)
    Python基础(中篇)
    Python基础(上篇)
    Pycharm安装
    Python的安装与配置
  • 原文地址:https://www.cnblogs.com/fcyworld/p/6210846.html
Copyright © 2020-2023  润新知