为了我们oa

一共两道题,

可以认为第二题是求1~n中,起点和终点组合的个数,纯数学题
比如例子,长度为5,取值起点取值范围1~5(不可为空),终点取值范围为 起点~5
起点1 终点5个选择
起点2 终点4个选择
起点3 终点3个选额
···
起点5 终点1个选择
1+2+3+···+n=n*(n+1)/2

可是这样会有重复的吧,就是相同的sub有可能会计算多次,我记得看之前的面经有人用过数学算,有几个case也过不去

有一个技巧叫 rolling hash,可以借助rolling hash快速判断字符串是否重复
leetcode采用了rolling hash技术的题 https://leetcode.com/problems/longest-repeating-substring/solution/

rolling hash 可以做到O(n^2)
最优的做法是后缀自动机可以做到O(n)

这个题就算是不用rolling hash,弄一个set出来存,然后枚举所有substring, 也是O(n^2)