该题解的核心思路是利用哈希表来记录每个字符出现的所有位置,然后依此判断是否存在形如a+a的子字符串。具体实现中,遍历字符串的每个字符,利用一个字典res存储每个字符和其出现位置的列表。对于当前字符t和位置i,检查之前所有t出现的位置,判断在这些位置之间的字符串是否可以形成a+a。这是通过比较两个相邻位置间的字符串是否相同来完成的。如果相同,则将该字符串加入到结果集合ans中。最终,返回集合ans的大小,即不同的符合条件的子字符串数目。
时间复杂度: O(n^3)
空间复杂度: O(n)
class Solution:
def distinctEchoSubstrings(self, text: str) -> int:
res = defaultdict(list) # 存储每个字符出现的位置
ans = set() # 存储符合条件的子字符串,自动去重
for i, t in enumerate(text): # 遍历每个字符及其索引
for index in res[t]: # 对当前字符的每个先前出现位置进行检查
if index + 1 >= i - index: # 确保不越界
if text[index - i + index + 1: index + 1] == text[index + 1: i + 1]: # 比较两段是否相同
ans.add(text[index + 1: i + 1]) # 若相同,则添加到结果集
res[t].append(i) # 更新当前字符的位置列表
return len(ans) # 返回不同子字符串的数量