Python-LC(1540:K次操作转变字符串)
思路:刚刚看到题,觉得不难,思路还是很直观(但是基础不牢,导致错误频频,写的sh*t 代码),先统计两个字符串中每一个字符应该修改的次数,然后就是遍历看看是否可以拥有足够的操作次数来进行修改
def char_len(a:str,b:str):
return b-a if a<=b else 26+b-a
lens = len(s)
if len(s) != len(t):
return False
count_list = []
# 统计每一个字符应该变换的次数ord将单字符转为unicode码方便计数
for i in range(lens):
count_list.append(char_len(ord(s[i]),ord(t[i])))
print(count_list)
#第一次报错,没有考虑k多余26的时候的情况
result = {i:0 for i in range(1,27)}
epochs = k // 26
more = k % 26
for i in range(1,27):
result[i] = epochs
for i in range(1,more+1):
result[i] += 1
# 第二次报错 循环判断出错
for index,item in enumerate(count_list):
for i in range(1,27):
if item != 0 and item == i:
if result[i] != 0:
count_list[index] = 0
result[i] -= 1
for i in count_list:
if i != 0:
return False
return True
优化思路:每一个差值可以直接访问修改次数字典
def char_len(a:str,b:str):
return b-a if a<=b else 26+b-a
lens = len(s)
if len(s) != len(t):
return False
count_list = []
for i in range(lens):
count_list.append(char_len(ord(s[i]),ord(t[i])))
print(count_list)
result = defaultdict(int)
epochs = k // 26
more = k % 26
for i in range(1,27):
result[i] = epochs
for i in range(1,more+1):
result[i] += 1
for item in count_list:
if item != 0:
if result[item] > 0:
result[item] -= 1
else:
return False
return True