python做题日记(5)

第十三题

        第十三题与第十二题是相反的题目,第十三题是将罗马数字转化为整数,对于罗马数字来说如果当前字符右边的字符代表的数字大于自身,则在累加时自身符号为负,如果当前字符右边的字符代表的数字小于自身,则在累加时自身符号为正,因此在将罗马数字转化为整数时需要将每个当前字符与其右边的字符进行比较。我是按照从右往左的顺序进行累加的。

class Solution:
    def romanToInt(self, s: str) -> int:
        # 罗马数字与整数的映射
        roman_dict = {
            'I': 1,
            'V': 5,
            'X': 10,
            'L': 50,
            'C': 100,
            'D': 500,
            'M': 1000
        }
        result = 0
        prev_value = 0

        # 从右往左遍历字符串
        for char in reversed(s):
            value = roman_dict[char]
            if value < prev_value:
                result -= value
            else:
                result += value
            prev_value = value

        return result

第十四题

        第十四题是查找给定的字符串组中的最长公共前缀,这题可以将第一个字符作为待定的公共前缀,用其与剩下的字符串进行比较,在与下一个字符串进行比较时,从后往前不断缩小待定的公共前缀,直至与当前比较字符串具有相同的公共前缀,再以此类推,与所有的字符串进行比较获得最长公共前缀。

class Solution:
    def longestCommonPrefix(self, strs: list[str]) -> str:
        if not strs:
            return ""
        
        # 以第一个字符串为基准
        prefix = strs[0]
        for s in strs[1:]:
            # 不断缩短 prefix,直到它是 s 的前缀
            while not s.startswith(prefix):
                prefix = prefix[:-1]
                if not prefix:
                    return ""
        return prefix

python字符串有一个内置方法,用于判断字符串是否以指定前缀开头。

str.startswith(prefix[, start[, end]])

prefix:要判断的前缀,可以是字符串或元组(多个前缀)。

start(可选):检查的起始位置。

end(可选):检查的结束位置。

你可能感兴趣的:(python刷题,python,开发语言,学习,算法)