最大不同子字符串数


9

描述

给定一个长度n和一个字母大小k>0,您的程序必须确定带有最大唯一子字符串数的那些参数的字符串数。在这种情况下k=2,将生成OEIS A134457

例如,2210具有子 2222212210221210110,和0,总共11。然而,2出现了两次,所以它只有10个独特的子串。

对于包含3个不同符号的长度为4的字符串,此数目尽可能多,但它与其他35个字符串并列0012,总共36个绑定字符串,包括2101,和0121。因此,对于n=4k=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=2k=3输出9 :11,12,21,22,31,32,33,13,23
veganaiZe

@veganaiZe两位数字具有重复的子字符串。
user1502040

Answers:



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

Mathematica,96个字节

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

2

Haskell,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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.