两种解法:
第一种,暴力解法,采用双重循环,解决问题(时间复杂度较高)
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 Falsereturn True
第二种,利用哈希表解决问题,利用列表记录每一个字母首次出现的位置,当第二次出现时,与列表内存储的数据相减,可以得到两个相同字母之间的字母数量,具体代码和注释如下:
class Solution:def checkDistances(self, s: str, distance: list[int]) -> bool:# 先建立数组,用于记录改字母当前位置,当遇到第二个字母时,进行相减即可获得之间的字母数量list = [-1]*26# 记录当前字母的位置index = 0for 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# 与系统给出的不同,则返回FALSEif x!=distance[j]:return Falseindex+=1return True
知识点:Python内置函数ord()使用
http://t.csdnimg.cn/7HmHf