超级字符串访谈街:Python

超级字符串访谈街:Python,python,algorithm,Python,Algorithm,我的代码通过了6/10个测试用例 from collections import Counter j,k = map(int, raw_input().split()) y = Counter(len(raw_input()) for i in range(j)) saved = {} def f(x): if x in saved: return saved[x] if x<1: return 0 k = y[x] if x in y else 0


我的代码通过了6/10个测试用例

from collections import Counter
j,k = map(int, raw_input().split())

y = Counter(len(raw_input()) for i in range(j))

saved = {}

def f(x):
    if x in saved:  return saved[x]
    if x<1: return 0
    k = y[x] if x in y else 0
    for i in y:
        k += y[i]*f(x-i)
   saved[x] = k
   return k
x = 0
for i in xrange(1,k+1):
    x+=f(i)

print (x+1)%1000000007
从集合导入计数器
j、 k=map(int,原始输入().split())
y=计数器(范围(j)内i的len(原始输入()
已保存={}
def f(x):
如果x已保存:返回已保存的[x]

如果x我认为在任何超级字符串是任何其他超级字符串的concat的情况下,该代码都会失败。 在这种情况下,此代码将多次添加某些情况。 例如:

您的输出:8
右输出:7
重复计算“ab”

我自己在试这个问题,如果分数为10/10,我会发布答案。好的,这是我的代码。我使用了您的代码作为算法,但删除了可以由其他超级字符串串联而成的超级字符串。 谢谢你发布你的问题,我在看到这篇文章之前的原始代码是非常不理想的。 欢迎任何进一步优化此功能的建议

from collections import Counter
j,k = map(int, raw_input().split())

supers_list = []

for i in range(j):
    supers_list.append(raw_input())

def check_concat(Str_, Sub_Str_):
    if Sub_Str_ == "":
        return False

    for i in supers_list:
        if i == Sub_Str_ and Str_ != Sub_Str_:
        return True
    x = Sub_Str_.startswith(i)
    if x == True:
        if check_concat(Str_, Sub_Str_[len(i):]) == True:
            return True
return False

def filter_():
    tmp = []
    global supers_list
    for i in supers_list:
        if check_concat(i,i) == False:
            tmp.append(i)
    supers_list = tmp

filter_()

y = Counter(len(i) for i in supers_list)

saved = {}

def f(x):
    if x in saved:  return saved[x]
    if x<1: return 0
    k = y[x] if x in y else 0
    for i in y:
        k += y[i]*f(x-i)
    saved[x] = k
    return k
x = 0
for i in xrange(1,k+1):
    x+=f(i)

print (x+1)%1000000007
从集合导入计数器
j、 k=map(int,原始输入().split())
超级列表=[]
对于范围(j)内的i:
super\u list.append(原始输入())
def check_concat(Str_,Sub_Str_):
如果子字符串=“”:
返回错误
对于超级列表中的i:
如果i==Sub_Str_uuu和Str_uuu!=附属机构:
返回真值
x=子结构开始(i)
如果x==真:
如果选中(Str,Sub_Str)[len(i):])==True:
返回真值
返回错误
def过滤器()
tmp=[]
全球超级用户列表
对于超级列表中的i:
如果check_concat(i,i)=False:
tmp.append(i)
超级列表=tmp
过滤器()
y=计数器(超级列表中的i的长度(i))
已保存={}
def f(x):
如果x已保存:返回已保存的[x]

如果在解决这个问题之前,你应该试着做更多的工作,那么你试过什么?你能完成代码的执行吗?它在用英语做什么?
from collections import Counter
j,k = map(int, raw_input().split())

supers_list = []

for i in range(j):
    supers_list.append(raw_input())

def check_concat(Str_, Sub_Str_):
    if Sub_Str_ == "":
        return False

    for i in supers_list:
        if i == Sub_Str_ and Str_ != Sub_Str_:
        return True
    x = Sub_Str_.startswith(i)
    if x == True:
        if check_concat(Str_, Sub_Str_[len(i):]) == True:
            return True
return False

def filter_():
    tmp = []
    global supers_list
    for i in supers_list:
        if check_concat(i,i) == False:
            tmp.append(i)
    supers_list = tmp

filter_()

y = Counter(len(i) for i in supers_list)

saved = {}

def f(x):
    if x in saved:  return saved[x]
    if x<1: return 0
    k = y[x] if x in y else 0
    for i in y:
        k += y[i]*f(x-i)
    saved[x] = k
    return k
x = 0
for i in xrange(1,k+1):
    x+=f(i)

print (x+1)%1000000007