283
题目描述:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
解答:
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
for i in range(nums.count(0)):
nums.remove(0)
nums.append(0)
1047
题目描述:
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
示例:
解答:
class Solution:
def removeDuplicates(self, S: str) -> str:
# 初始化栈
stack = []
# 遍历栈元素
for e in S:
if stack and stack[-1] == e:
stack.pop()
else:
stack.append(e)
return "".join(stack)
1249
题目描述:
给你一个由 ‘(’、’)’ 和小写字母组成的字符串 s。
你需要从字符串中删除最少数目的 ‘(’ 或者 ‘)’ (可以删除任意位置的括号),使得剩下的「括号字符串」有效。
请返回任意一个合法字符串。
有效「括号字符串」应当符合以下 任意一条 要求:
空字符串或只包含小写字母的字符串
可以被写作 AB(A 连接 B)的字符串,其中 A 和 B 都是有效「括号字符串」
可以被写作 (A) 的字符串,其中 A 是一个有效的「括号字符串」
示例:
解答:
class Solution:
def minRemoveToMakeValid(self, s: str) -> str:
res = []
for i,j in enumerate(s):
if j =='(':
res.append([i,j])
elif j ==')':
if res==[] or res[-1][1] != '(':
res.append([i,j])
else:
res.pop()
s = list(s)
for k,l in enumerate(res):
s.pop(l[0]-k)
return ''.join(s)
1781
题目描述:
一个字符串的 美丽值 定义为:出现频率最高字符与出现频率最低字符的出现次数之差。
比方说,“abaacc” 的美丽值为 3 - 1 = 2 。
给你一个字符串 s ,请你返回它所有子字符串的 美丽值 之和。
示例:
解答:
class Solution:
def beautySum(self, s: str) -> int:
res = 0
n = len(s)
for i in range(n):
d = defaultdict(int)
for j in range(i, n):
d[s[j]] += 1
res += max(d.values()) - min(d.values())
return res
面试题01.06
题目描述:
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。
示例:
解答:
class Solution:
def compressString(self, S: str) -> str:
#最后补一个字符可以省去一点边界处理
n = len(S)
if n <= 1:
return S
S += "$"
now, cnt, ret = S[0], 1, ""
for i in range(1, n + 1):
if S[i] != now:
ret += now + str(cnt)
if len(ret) >= n:
return S[:n]
now, cnt = S[i], 1
else:
cnt += 1
return ret