目录
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 - 1a = "Z"while n > 26:s = n % 26n = n // 26r.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 Falseif len(s) == None or len(s) < 2:return Truesmap = {}for i in range(len(s)):if s[i] not in smap and t[i] in smap.values():return Falseif s[i] in smap and smap[s[i]] != t[i]:return Falsesmap[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] = Truedp = [i for i in range(size)]for i in range(1, size):if is_palindrome[0][i]:dp[i] = 0else: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 每日一练 专栏 |