고유 한 부분 문자열의 최대 개수


9

기술

길이 n와 알파벳 크기가 주어지면 k>0프로그램은 최대 개수의 고유 한 하위 문자열을 갖는 매개 변수를 가진 문자열 수를 결정해야합니다. 의 경우 k=2OEIS A134457 이 생성 됩니다 .

예를 들어, 2210하위 문자열을 가지고 , 2, 22, 221, 2210, 2, 21, 210, 1, 10, 및 0, 단 (11)의 총, 2단지 10 개의 고유 문자열을 갖고 있으므로, 두번 나타난다.

이는 3 개 개의 심볼들을 포함하는 길이 4 문자열 가능한 많은이지만, 묶는 것을 포함하여 36 문자열 총 35 다른 문자열과의 관계 0012, 21010121. 따라서 n=4및의 k=3경우 프로그램이 36을 출력해야합니다.

테스트 사례

n    k    output

0    5    1
1    3    3
5    1    1
9    2    40
2    3    6
5    5    120

3
몇 가지 예를 들어 주시겠습니까? 아주 짧은 설명에서 도전을 따르는 것은 어렵습니다.
ETHproductions

그래서 않을 것 n=2, k=3출력 9 : 11,12,21,22,31,32,33,13,23?
veganaiZe

@veganaiZe 두 자리 숫자에는 반복되는 부분 문자열이 있습니다.
user1502040

답변:



3

Pyth, 12 바이트

l.Ml{.:Z)^UE

온라인으로 사용해보십시오.

순수한 무차별 대입

설명

  • 암시 적 : Q프로그램에 추가 하십시오.
  • 암시 적 :의 입력 줄 ( n)을 읽고 평가하십시오 Q.
  • E: 입력 라인을 읽고 평가합니다 ( k).
  • U: 범위를 얻습니다 [0, ..., k-1].
  • ^:의 모든 n길이의 문자열을 가져옵니다 [0, ..., k-1].
  • .M: 기능을 최대한 활용하는 것을 찾으십시오 f(Z).
    • .:Z:의 하위 문자열을 찾습니다 Z
    • {: 중복 제거
    • l: 고유 한 부분 문자열 개수를 얻습니다.
  • l: 그러한 문자열의 수를 얻습니다

2

수학, 96 바이트

Last[Last/@Tally[Length@Union@Flatten[Table[Partition[#,i,1],{i,s}],1]&/@Tuples[Range@#2,s=#]]]&

2

하스켈, 82 바이트

import Data.Lists
l=length
n#k=l$argmaxes(l.nub.powerslice)$mapM id$[1..k]<$[1..n]

사용 예 : 9 # 2-> 40.

작동 방식 :

       [1..k]<$[1..n]  --  make a list of n copies of the list [1..k]
      mapM id          --  make a list of all combinations thereof, where
                       --  the 1st element is from the f1st list, 2nd from 2nd etc
  argmaxes             --  find all elements which give the maximum value for function:
     l.nub.powerslice  --    length of the list of unique sublists
l                      --  take the length of this list
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.