길이 n의 문자열 t가 주어 졌을 때, t의 다른 하위 문자열 수를 계산하는 알고리즘을 O (n)에서 설계해야합니다.문자열에 몇 개의 다른 부분 문자열이 있습니까?
-5
A
답변
0
입력 문자열에 대한 접미사 자동 완성을 작성하십시오.
maxLength[v]
이v
상태로 루트에서 가장 긴 경로는maxLength[v] - maxLength[suffixLink[v]] for all states v
및suffixLink[v]
의 합을 찾기는이 상태에 대한 접미사 링크입니다.
선형 시간에 접미사 자동 완성을 만드는 것은 잘 알려진 문제입니다. 두 번째 부분은 단순한 순회입니다. 따라서 총 시간 복잡도는 O(n)
입니다.
+0
대단히 고마워, 내가 필요한 바로 그 것이다. 다른 사람이 알고리즘을 발견 한 링크를 떠나는 데 도움이된다면. [한국어 Google 번역] (https://translate.google.es/translate?hl=es&sl=ru&tl=ko&u=http%3A%2F%2Fe-maxx.ru%2Falgo%2Fsuffix_automata) [러시아어 원본] (http://e-maxx.ru/algo/suffix_automata) – corxil
귀하의 접근 방식은 무엇입니까? –
수식 : ** N!/(E0! ... Em!) ** 여기서 E0 ... Em은 문자열에서 m 개의 고유 한 문자의 수입니다. O (n)에서 거기에서 가져 오는 것이 꽤 간단합니다. –