超级字符串访谈街: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