2015-01-06 7 views
-5

길이 n의 문자열 t가 주어 졌을 때, t의 다른 하위 문자열 수를 계산하는 알고리즘을 O (n)에서 설계해야합니다.문자열에 몇 개의 다른 부분 문자열이 있습니까?

+3

귀하의 접근 방식은 무엇입니까? –

+0

수식 : ** N!/(E0! ... Em!) ** 여기서 E0 ... Em은 문자열에서 m 개의 고유 한 문자의 수입니다. O (n)에서 거기에서 가져 오는 것이 꽤 간단합니다. –

답변

0
  1. 입력 문자열에 대한 접미사 자동 완성을 작성하십시오.

  2. maxLength[v]v 상태로 루트에서 가장 긴 경로는 maxLength[v] - maxLength[suffixLink[v]] for all states vsuffixLink[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