13. 罗马数字转整数(python练习)

13. 罗马数字转整数(python练习)

  • 题目+思路
    • 题目
    • 思路
  • 代码实现(思路体现为:逐个元素查找公共字段_有借鉴)
  • 专注于查找前缀的代码实现(未能优化~时间有限)

                         QQ:3020889729                                                                                 小蔡

以下解题思路,仅表示个人做题思路或引荐别人的方法——如有引用我会标注出来的

题目+思路

题目

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
测试样例:
输入: [“flower”,“flow”,“flight”]
输出: “fl”

思路

  1. 首先明确字符串数组——也就是list,如果不存在一个字符串元素,我们就直接返回空字符串~
  2. 仅含有一个字符串,那么直接输出这个字符串~
  3. 排除这些情况后,先选取第一个元素字符串作为公共字符字段的标准,用来与第二个元素进行判别,如果直接相比不相等,那么字符段标准就减去最后一个字符,在进行比较,不相等就依次减下去——直到剩下的字符段标准在第二个字段中存在,才进行下一个字符串元素的最长公共前缀的判断——只要有一个没有公共字符串,那么就直接返回""
  4. 以上方法得以实现——是因为明确了数据仅存在前缀相等,如果数据出现:oxflxx,flow,oflxd;那么你用这样的方式,获取的仅仅都含有fl字段,但并非前缀了哦(这上边的这种方法算是一种为了解题的捷径吧

代码实现(思路体现为:逐个元素查找公共字段_有借鉴)

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
             if len(strs) == 0:
                 return ""
             if len(strs) == 1:
                 return strs[0]
                 
             first_jg = strs[0]  # 获取首元素作为最开始的公共字段
             
             for i in range(1, len(strs)):  # 进行字段查找遍历
                 while strs[i].find(first_jg ) != 0:  # 当找到最长公共字段后就会破出
                     first_jg = first_jg [:-1]  # 否则减去最后一个字符!!!
             return ptspr

专注于查找前缀的代码实现(未能优化~时间有限)

我把思路主要放在代码中:
简要的思路是:先判断元素的最小字符串长度,然后再进行前缀的判断——为了获得公共字符,就取第一个字符串的每一个元素作为标准,依次进行判断,满足的字符连接起来,返回就可以了——但是只要遇到一个不同就应该退出遍历了~~~

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
         zero = 0  # 查找数组的元素的字符串最短长度
         outpust = ''  # 输出的公共字段
         juge = ''  # 某一个确定的公共字符
         counts = 0  # 作为该公共字符是否为有效公共字符
         for i in range(0, len(strs)):
             zero = max(zero, len(strs[i]))  # 先获取元素最大长度
         for i in range(0, len(strs)):
             zero = min(zero, len(strs[i]))ha  # 再由最大长度获取最小长度
         for j in range(0, zero):  # 根据最小长度为依据,进行遍历可能的公共前缀字符
             counts = 0
             for i in range(0, len(strs)):
                 if i == 0:
                     juge = strs[i][j]  # 每次数组遍历时,把第一个元素的j位字符作为依据进行后边的判断
                 else:
                     if juge == strs[i][j]:
                         counts += 1  # 每一次判断字符相等,就记一次数
                     else:
                         counts = -2  # 结束公共前缀字符的判断
                         break  # 遇到一个不相等就破出循环
             if counts == (len(strs) - 1):  # 公共前缀字符的合成
                 outpust += juge  # 加上满足的字符
             elif counts == -2:  # 提前破出条件
                 break
         return outpust

你可能感兴趣的:(leetcode练习题)