题目:
双生词是指如下条件的两个字符串:
假设S和S’
1、长度相同
2、S的首尾连成环,选个位置切开,顺时针或者逆时针能够得到字符串S’
得到S和S’是双生词,S’和S互为双生此。
给定一批仅有英文小写字母组成的字符串、问他们之间是否有双生词。
输入:
首先给出测试组数t,一共多少组数据、
对每组数据,第一行整数n,表示字符串字数,接下里啊n行,每行一个字符串。
输出:
对于每组数据,存在双生词,输出Yeah。不存在,输出Sad
例子:
3
2
abc
bac
2
hsa
sah
2
aas
ass
输出
Yeah
Yeah
Sad
备注:
对40%的数据,n<1000
对100%的数据,1<=t<=10,n<100000,字符串长度为1-32
我的思路:
暴力解法,遍历出一个字符串的双生词的形式,然后在数据里两两判断是不是双生词,找到一个就跳出进入下一个数据。
顺时针构建双生词:
字符串正向查找,从第一个字符串循环后最后一个字符串。
新字符串=当前字符到结尾字符+起始字符到当前字符串的前一个字符。
逆时针:
字符串反向。重复查找操作。
结果:只能ac 40%。
def shuangsheng(s1,s2):
if(len(s1)!=len(s2)):
return 'Sad'
temp=''
s1_f=s1[::-1]
flag='Sad'
for i in range(len(s1)):
if(i==0):
k1=s1
else:
k1=s1[i:]+s1[:i]
if(k1==s2 ):
flag='Yeah'
break
if(flag!='Yeah'):
for i in range(len(s1_f)):
if (i == 0):
k1 = s1_f
else:
k1 = s1_f[i:] + s1_f[:i]
if (k1 == s2):
flag = 'Yeah'
break
return flag
def xuanqu(dt):
for item in dt:
flag='Sad'
for i in range(len(item)):
if (flag != 'Yeah'):
for j in range(i+1,len(item)):
if(shuangsheng(item[i],item[j])=='Yeah'):
flag='Yeah'
break
else:
break
print(flag)
# if __name__=='__main__':
t=int(input())
dt=[]
for i in range(t):
dt_it=[]
n=int(input())
for j in range(n):
dt_it.append(str(input()))
dt.append(dt_it)
xuanqu(dt)