• LeetCode刷题---简单组(二)


    🍒题目一 14. 最长公共前缀

    请添加图片描述
    编写一个函数来查找字符串数组中的最长公共前缀。

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

    示例 1:

    输入:strs = [“flower”,“flow”,“flight”]
    输出:“fl”
    示例 2:

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


    🍒解法一

    来自一位大佬的解答

    class Solution(object):
        def longestCommonPrefix(self, s):
            if not s:
                return ""
            res = s[0]
            i = 1
            while i < len(s):
                while s[i].find(res) != 0:
                    res = res[0:len(res)-1]
                i += 1
            return res
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 首先,检查输入的字符串列表s是否为空,如果为空,直接返回一个空字符串,因为没有任何字符串可以用于计算公共前缀。

    • 接着,初始化一个变量res为s列表的第一个字符串,即s[0]。这个变量res将用来存储最长公共前缀。

    • 使用一个循环,从第二个字符串开始,即s[1],一直到最后一个字符串。循环变量i从1递增到len(s)-1。

    • 在内部的while循环中,通过使用字符串的find方法来查找当前的res是否是字符串s[i]的前缀,如果不是,就将res截断掉最后一个字符(res[0:len(res)-1])然后再次进行检查,直到res成为s[i]的前缀为止。

    • 最后,增加i的值,继续处理下一个字符串,直到处理完所有的字符串。

    • 返回res,它将是输入字符串列表s的最长公共前缀。

    大概就是根据由第一个字符串进行初始处理,反复使用find函数进行与其余字符串判断,这里的亮点是find函数

    🍒find函数

    find 函数是Python中字符串对象的一个方法,用于在一个字符串中查找另一个子字符串,并返回第一次出现该子字符串的位置。如果未找到子字符串,find 方法将返回 -1。

    sentence = "This is an example sentence"
    index = sentence.find("example")
    print(index)  # 输出 11,因为"example"在位置11开始
    
    • 1
    • 2
    • 3

    🍒题目二 13. 罗马数字转整数

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

    字符 数值
    I 1
    V 5
    X 10
    L 50
    C 100
    D 500
    M 1000
    例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。

    通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

    I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
    X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
    C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
    给定一个罗马数字,将其转换成整数。

    示例 1:

    输入: s = “III”
    输出: 3
    示例 2:

    输入: s = “IV”
    输出: 4
    示例 3:

    输入: s = “IX”
    输出: 9
    示例 4:

    输入: s = “LVIII”
    输出: 58
    解释: L = 50, V= 5, III = 3.
    示例 5:

    输入: s = “MCMXCIV”
    输出: 1994
    解释: M = 1000, CM = 900, XC = 90, IV = 4.


    🍒解法一

    class Solution:
        def romanToInt(self, s):
            d = {
                'I': 1, 
                'IV': 4, 
                'V': 5, 
                'IX': 9, 
                'X': 10, 
                'XL': 40, 
                'L':  50, 
                'XC': 90, 
                 'C': 100, 
                 'CD': 400, 
                 'D': 500, 
                 'CM': 900,
                  'M': 1000
                  }
            result = 0
            i = 0
            while i < len(s):
                str1 = s[i:i+2]  
                if str1 in d: 
                    result += d.get(str1) 
                    i += 2
                else:
                    result += d[s[i]] 
                    i += 1
            return result
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    这位大佬的亮点在i+=2,因为哪怕左右两个罗马数字是小大的顺序,也仅仅是它们两个,接下来就重新开始了,所以这种情况只能是离散的情况,不会连续

    🍒题目三 9. 回文数

    给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

    回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

    例如,121 是回文,而 123 不是。

    示例 1:

    输入:x = 121
    输出:true
    示例 2:

    输入:x = -121
    输出:false
    解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
    示例 3:

    输入:x = 10
    输出:false
    解释:从右向左读, 为 01 。因此它不是一个回文数。

    🍒解法一

    class Solution(object):
        def isPalindrome(self, x):
            """
            :type x: int
            :rtype: bool
            """
            x_str = str(x)
            return x_str == x_str[::-1]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    本题较为简单,使用了列表的反向操作


    请添加图片描述

    挑战与创造都是很痛苦的,但是很充实。

  • 相关阅读:
    第28讲:Ceph集群使用RBD块存储与K8S Volumes集成
    JavaScript 中基本数据类型和引用数据类型是如何存储的
    CORE: Automatic Molecule Optimization using Copy and Refine Strategy(论文解读)
    springboot项目打包优化,将所有第三方包单独打包至lib目录
    Java集合常见面试题
    工薪族创业方案
    【Java每日一题】——第二十九题:超市购物程序设计(2023.10.13)
    HTTP协议之Expect爬坑
    机器学习笔记之EM算法(二)EM算法公式推导过程
    [车联网安全自学篇] Android安全之APK内存敏感信息泄露挖掘【动态分析】
  • 原文地址:https://blog.csdn.net/null18/article/details/134023019