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

简介: 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
  • 首先,检查输入的字符串列表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开始

🍒题目二 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

这位大佬的亮点在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]

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


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

相关文章
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
27 6
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
27 4
|
13天前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
41 2
|
13天前
|
索引 Python
【Leetcode刷题Python】从列表list中创建一颗二叉树
本文介绍了如何使用Python递归函数从列表中创建二叉树,其中每个节点的左右子节点索引分别是当前节点索引的2倍加1和2倍加2。
16 7
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
13 4
|
14天前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
32 5
|
13天前
|
算法 Python
【Leetcode刷题Python】 LeetCode 2038. 如果相邻两个颜色均相同则删除当前颜色
本文介绍了LeetCode 2038题的解法,题目要求在一个由'A'和'B'组成的字符串中,按照特定规则轮流删除颜色片段,判断Alice是否能够获胜,并提供了Python的实现代码。
25 3
|
13天前
|
算法 Python
【Leetcode刷题Python】剑指 Offer 33. 二叉搜索树的后序遍历序列
本文提供了一种Python算法,用以判断给定整数数组是否为某二叉搜索树的后序遍历结果,通过识别根节点并递归验证左右子树的值是否满足二叉搜索树的性质。
11 3
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - II. 从上到下打印二叉树 II
本文提供了一种Python实现方法,用于层次遍历二叉树并按层打印结果,每层节点按从左到右的顺序排列,每层打印到一行。
24 3
|
14天前
|
Python
【Leetcode刷题Python】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
Leetcode题目"剑指 Offer 21. 调整数组顺序使奇数位于偶数前面"的两种Python解决方案,一种是使用双端队列调整数组顺序,另一种是使用双指针法将奇数移到数组前半部分,偶数移到后半部分。
15 4