当前位置:实例文章 » Python实例» [文章]Python每日一练(20230308)

Python每日一练(20230308)

发布人:shili8 发布时间:2023-03-09 23:33 阅读次数:44

目录

1. Excel表列名称 ★

2. 同构字符串 ★★

3. 分割回文串 II ★★★

🌟 每日一练刷题专栏

C/C++ 每日一练 专栏

Python 每日一练 专栏


1. Excel表列名称

给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。

例如:

A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28 
...

示例 1:

输入:columnNumber = 1
输出:"A"

示例 2:

输入:columnNumber = 28
输出:"AB"

示例 3:

输入:columnNumber = 701
输出:"ZY"

示例 4:

输入:columnNumber = 2147483647
输出:"FXSHRXW"

提示:

  • 1 <= columnNumber <= 2^31 - 1

代码:

class Solution(object):
    def convertToTitle(self, n):
        """
        :type n: int
        :rtype: str
        """
        d = {}
        r = []
        a = ""
        for i in range(1, 27):
            d[i] = chr(64 + i)
        if n <= 26:
            return d[n]
        if n % 26 == 0:
            n = n / 26 - 1
            a = "Z"
        while n > 26:
            s = n % 26
            n = n // 26
            r.append(s)
        result = d[n]
        for i in r[::-1]:
            result += d[i]
        return result + a
    
# %%
s = Solution()
print(s.convertToTitle(1))
print(s.convertToTitle(28))
print(s.convertToTitle(701))
print(s.convertToTitle(2147483647))

输出:

A
AB
ZY
FXSHRXW


2. 同构字符串

给定两个字符串 s t,判断它们是否是同构的。

如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。

每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。

示例 1:

输入:s = "egg", t = "add"
输出:true

示例 2:

输入:s = "foo", t = "bar"
输出:false

示例 3:

输入:s = "paper", t = "title"
输出:true

提示:

  • 可以假设 s t 长度相同。

代码:

class Solution(object):
    def isIsomorphic(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: bool
        """
        if len(s) != len(t):
            return False
        if len(s) == None or len(s) < 2:
            return True
        smap = {}
        for i in range(len(s)):
            if s[i] not in smap and t[i] in smap.values():
                return False
            if s[i] in smap and smap[s[i]] != t[i]:
                return False
            smap[s[i]] = t[i]
        return True
    
# %%
s = Solution()
print(s.isIsomorphic(s = "egg", t = "add"))
print(s.isIsomorphic(s = "foo", t = "bar"))
print(s.isIsomorphic(s = "paper", t = "title"))

输出:

True
False
True


3. 分割回文串 II

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文。

返回符合要求的 最少分割次数

示例 1:

输入:s = "aab"
输出:1
解释:只需一次分割就可将 s 分割成 ["aa","b"] 这样两个回文子串。

示例 2:

输入:s = "a"
输出:0

示例 3:

输入:s = "ab"
输出:1

提示:

  • 1 <= s.length <= 2000
  • s 仅由小写英文字母组成

代码:

class Solution:
    def minCut(self, s):
        size = len(s)
        is_palindrome = [[False] * size for _ in range(size)]
        for r in range(size):
            for l in range(r, -1, -1):
                if s[l] == s[r] and (r - l <= 2 or is_palindrome[l + 1][r - 1]):
                    is_palindrome[l][r] = True
        dp = [i for i in range(size)]
        for i in range(1, size):
            if is_palindrome[0][i]:
                dp[i] = 0
            else:
                dp[i] = min(dp[j] + 1 for j in range(i) if is_palindrome[j + 1][i])
        return dp[-1]
    
# %%
s = Solution()
print(s.minCut(s = "aab"))
print(s.minCut(s = "a"))
print(s.minCut(s = "ab"))

输出:

1
0
1


其它做法:

class Solution(object):
def minCut(self, s):
n = len(s)
dp = [n] * n
for i in range(n):
if s[0: i + 1] == s[0: i + 1][::-1]:
dp[i] = 0
continue
for j in range(i):
if s[j + 1: i + 1] == s[j + 1: i + 1][::-1]:
dp[i] = min(dp[i], dp[j] + 1)
return dp[n - 1]


🌟 每日一练刷题专栏

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力!

收藏,你的青睐是我努力的方向!

评论,你的意见是我进步的财富!

C/C++ 每日一练 专栏

Python 每日一练 专栏

相关标签:

免责声明

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱290110527@qq.com删除。

其他信息

其他资源

Top