头条2018.8.25算法第三题:双生词(暴力ac40%)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gsch_12/article/details/82050661

题目:
双生词是指如下条件的两个字符串:
假设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)

猜你喜欢

转载自blog.csdn.net/gsch_12/article/details/82050661