两种解法:
第一种,暴力解法,采用双重循环,解决问题(时间复杂度较高)
class Solution:
def checkDistances(self, s: str, distance: List[int]) -> bool:
n = len(s)
for i in range(n):
for j in range(i + 1, n):
x = distance[ord(s[i]) - ord('a')]
if s[i] == s[j] and x != j - i - 1:
return False
return True
第二种,利用哈希表解决问题,利用列表记录每一个字母首次出现的位置,当第二次出现时,与列表内存储的数据相减,可以得到两个相同字母之间的字母数量,具体代码和注释如下:
class Solution:
def checkDistances(self, s: str, distance: list[int]) -> bool:
# 先建立数组,用于记录改字母当前位置,当遇到第二个字母时,进行相减即可获得之间的字母数量
list = [-1]*26
# 记录当前字母的位置
index = 0
for i in s:
# 利用ord函数将字母转化为ascll码值
j = ord(s[index])-ord('a')
# 等于-1代表字母第一次出现,反之是第二次出现
if list[j] == -1:
# 记录改字母当前位置
list[j]=index
else:
# 计算两次出现的距离
x = index - list[j]-1
# 与系统给出的不同,则返回FALSE
if x!=distance[j]:
return False
index+=1
return True
知识点:Python内置函数ord()使用