1. 题目一
给出题目一的试题链接如下:
1. 解题思路
这题用一个栈结构基本也就搞定了,就不过多赘述了……
2. 代码实现
给出python代码实现如下:
class Solution:
def minLength(self, s: str) -> int:
stack = []
for ch in s:
if ch == "D" and len(stack) > 0 and stack[-1] == "C":
stack.pop()
elif ch == "B" and len(stack) > 0 and stack[-1] == "A":
stack.pop()
else:
stack.append(ch)
return len(stack)
提交代码评测得到:耗时67ms,占用内存16.3MB。
2. 题目二
给出题目二的试题链接如下:
1. 解题思路
这一题只需要从中间位置反推即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def makeSmallestPalindrome(self, s: str) -> str:
n = len(s)
chars = [ch for ch in s]
l, r = (n-2)//2, (n+1)//2
while l >= 0:
if chars[l] != chars[r]:
chars[l] = chars[r] = min(chars[l], chars[r])
l -= 1
r += 1
return "".join(chars)
提交代码评测得到:耗时207ms,占用内存16.5MB。
3. 题目三
给出题目三的试题链接如下:
1. 解题思路
这一题我的思路就是先找出所有的punishment数然后保存在缓存当中,然后对任意的n遍历一下即可。
2. 代码实现
给出python代码实现如下:
class Solution:
@lru_cache(None)
def is_punishment(self, n):
s = str(n*n)
m = len(s)
@lru_cache(None)
def dp(idx, r):
if idx >= m:
return r == 0
x = 0
success = False
for i in range(idx, m):
x = x*10 + int(s[i])
if success or x > r:
break
success = success | dp(i+1, r - x)
return success
return dp(0, n)
def punishmentNumber(self, n: int) -> int:
res = 0
for i in range(1, n+1):
if self.is_punishment(i):
res += i*i
return res
提交代码评测得到:耗时2074ms,占用内存31.6MB。
4. 题目四
给出题目四的试题链接如下:
这一题放弃了,没啥思路……