力扣(2024.06.10)

1. 10——正则表达式匹配

给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。

  • '.' 匹配任意单个字符
  • '*' 匹配零个或多个前面的那一个元素

所谓匹配,是要涵盖整个字符串 s 的,而不是部分字符串。

标签:递归,字符串,动态规划(困难题目前不会)

代码:

2. 11——盛最多水的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。

标签:数组,双指针

代码:

class Solution:
    def maxArea(self, height: List[int]) -> int:
        left = 0
        right = len(height) - 1
        res = 0
        while left < right:
            area = (right - left) * min(height[left], height[right])
            res = area if area > res else res
            if height[left] < height[right]:
                left = left + 1
            else:
                right = right - 1
        return res

3. 12——整数转罗马数字

七个不同的符号代表罗马数字,其值如下:

符号
I1
V5
X10
L50
C100
D500
M1000

罗马数字是通过添加从最高到最低的小数位值的转换而形成的。将小数位值转换为罗马数字有以下规则:

  • 如果该值不是以 4 或 9 开头,请选择可以从输入中减去的最大值的符号,将该符号附加到结果,减去其值,然后将其余部分转换为罗马数字。
  • 如果该值以 4 或 9 开头,使用减法形式,表示从以下符号中减去一个符号,例如 4 是 5 (V) 减 1 (I): IV ,9 是 10 (X) 减 1 (I):IX。仅使用以下减法形式:4 (IV),9 (IX),40 (XL),90 (XC),400 (CD) 和 900 (CM)。
  • 只有 10 的次方(IXCM)最多可以连续附加 3 次以代表 10 的倍数。你不能多次附加 5 (V),50 (L) 或 500 (D)。如果需要将符号附加4次,请使用减法形式。

给定一个整数,将其转换为罗马数字。

标签:哈希表,数学,字符串

代码:

class Solution:
    def intToRoman(self, num: int) -> str:
        haxi = {1000: "M", 900: "CM", 500: "D", 400: "CD", 
                100: "C", 90: "XC", 50: "L", 40: "XL", 10: "X", 
                9: "IX", 5: "V", 4: "IV", 1: "I"}
        res = ''
        for key in haxi:
            while num >= key:
                res = res + haxi[key]
                num = num - key
            if num == 0:
                break
        return res

4. 13——罗马数字转整数

罗马数字包含以下七种字符: I, V, X, LCD 和 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。

给定一个罗马数字,将其转换成整数。

标签:哈希表,数学,字符串

代码:

class Solution:
    def romanToInt(self, s: str) -> int:
        haxi = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
        res = 0
        for i in range(len(s) - 1):
            first = s[i]
            second = s[i + 1]
            if haxi[first] < haxi[second]:
                res = res - haxi[first]
            else:
                res = res + haxi[first]
        end = s[-1]
        res = res + haxi[end]
        return res

5. 14——最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""

标签:字符串

代码:

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        def two_str(s1, s2):
            res = ""
            i = 0
            while i < len(s1) and i < len(s2):
                if s1[i] == s2[i]:
                    res = res + s1[i]
                    i = i + 1
                else:
                    break
            return res
        res = strs[0]
        for i in strs:
            res = two_str(res, i)
            if res == "":  # 没有公共前缀,提前结束循环
                break
        return res
  • 22
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值