请教一道关于unique substrings的题

请问大家觉得这题在面试怎么答比较好:
在一条超长的string中找出不重复的substrings, 给定一个范围,比如[2,20],找所有长度在这个范围的substring

能给个例子吗?

比如input s: “banana”, [2,3]
答案就是ba,an,na,ban,ana,nan吧

这里的不重复怎么理解,ana有重复吧

sliding window 加 hashmap存window中每个字母的index?每次右移right扩展,发现重复就查hashmap,找到之前出现过的index,左边left缩到last index +1?

这里我理解为没有重复字母的substring

ana怎么就没重复字母了

个人感觉,需要一个list和一个set,list存当前char前面19的所有str的可能的组合,set存所有可能的组合,美遇到一个新的char就把新的char加到list里所有的str后面同时把距离当前char20的char开头的所有str拿掉

我的理解是ana这个substring本身是unique的

ana在原string出现两次啦

应该是说找出所有unique的substring吧?同一个算一遍的意思吧

那不同length的,各用一个set维护不就好了,不难吧

对呀感觉leetcode有一道题很像

是找 anagram group吧

每个ch开头的时候扫一遍trie…len在2-20的时候写上isword,len超过20停…

This is kind of like File System problem in 第七课:Airbnb 专题之OOD

One way is to use Map and the other way is Trie. There is tradeoff.

用set的话,有可能产生大量的immutable的substring,这对gc有压力。用trie就避免了这个问题,相当于string buffer。但是最后还得扫描trie,这是额外的runtime cost。