Python:每日一题 357
今天的题目:给定一组没有重复元素的单词 word,找出所有不同的索引对 (c, d),使得 words + words 可拼接成一个回文串。
示例 1:
输入:["abcd", "dcba", "lls", "s", "sssll"]
输出:[, , , ]
解释:可拼接成的回文串为 ["dcbaabcd", "abcddcba", "slls", "llssssll"]
示例 2:
输入:["bat", "tab", "cat"]
输出:[, ]
解释:可拼接成的回文串为 ["battab", "tabbat"]
{:10_298:}欢迎大家一起答题!{:10_298:} 本帖最后由 TJBEST 于 2020-3-23 18:02 编辑
不知道这个二元序列的顺序是否任意?我的第一个实例测试,序对正确,但是顺序不太一样
def fun357(words):
M = len(words)
len_arr =
result = []#考虑c==d的情况
for index in range(0,M):
P = len_arr
P_str = words
for inner in range(0,M):
Q = len_arr
Q_str = words
state = True
if P > Q:
N = (P - Q)//2
for other in range(0,Q):
if P_str != Q_str[-(other+1)]:
state = False
break
if state == False:
continue
for other in range(0,N):
if P_str != P_str[-(other+1)]:
state = False
break
if state == True:
result.append()
elif P < Q:
N = (Q - P)//2
for other in range(0,P):
if P_str != Q_str[-(other+1)]:
state = False
break
if state == False:
continue
for other in range(0,N):
if Q_str != Q_str:
state = False
break
if state == True:
result.append()
else:
for other in range(0,P):
if P_str != Q_str[-(other+1)]:
state = False
break
if state == True:
result.append()
return !=each]#剔除自洽 def test(word):
result = []
for i in range(len(word)):
for j in range(len(word)):
if i == j:
continue
joint = word + word
if joint == joint[::-1]:
result.append()
return result def fun357(list1):
result=[]
for i in range(len(list1)):
for j in range(i+1,len(list1)):
if i!=j:
temp=list1+list1
if temp==temp[::-1]:
result.append()
temp=list1+list1
if temp==temp[::-1]:
result.append()
return result
print(fun357(["abcd", "dcba", "lls", "s", "sssll"]))
print(fun357(["bat", "tab", "cat"])) 先占楼,昨天的没看到{:10_266:}都解决了,没法回答了 一个愚蠢的方法
def f357(list1):
lst=[]
for i in range(len(list1)):
for j in range(len(list1)):
tmp=list(list1 + list1)
tmp.reverse()
if list(list1+list1)==tmp:
if i!=j:
lst.append()
return lst def fun357(word):
result = []
dict1 = {a: i for i, a in enumerate(word)}
for i, a in enumerate(word):
ma = len(a)
for j in range(ma + 1):
sa, st = a[:j], a
ssa, sst = sa[::-1], st[::-1]
if sa == ssa and sst in dict1:
m = dict1
if m != i: result.append()
if j != ma and st == sst and ssa in dict1:
result.append(])
return result 本帖最后由 kinkon 于 2020-3-23 11:37 编辑
先跑起来,速度有点慢,后面再想其他办法
def f357(arr):
s, res = len(arr), []
tmp = tmp1 = ''
for i in range(s-1):
for j in range(i+1, s):
tmp = arr + arr
tmp1 = arr + arr
if tmp == tmp[::-1]:
res += []
if tmp1 == tmp1[::-1]:
res += []
return res def function(list1):
def f(s):
if len(s)%2 == 0:
s1 = s[:int(len(s)/2)] + s[:int(len(s)/2)][::-1]
else:
s1 = s[:int(len(s)/2)+1] + s[:int(len(s)/2)][::-1]
if s1 == s:
return True
else:
return False
list2 = []
for i in range(len(list1)):
for j in range(len(list1)):
if i != j:
if f(list1+list1):
list2.append()
return list2 本帖最后由 永恒的蓝色梦想 于 2020-3-23 10:17 编辑
没想到啥好方法from itertools import permutations as perm
def function(word):
result=[]
for i,j in perm(range(len(word)),2):
k=word+word
if k==k[::-1]:
result.append()
return result 本帖最后由 flamezyy 于 2020-3-22 23:25 编辑
def f357(arr):
result = []
for each in map(lambda i : (i+i,i,i), [(x , y) for x in arr for y in arr]):
if each != each:
if each == each[::-1]:
result.append(),arr.index(each)])
else:
continue
else:
continue
else:
return result
做题可太有意思了{:5_108:} def fun357(lst):
if not len(lst):return 0
result=[]
for i in range(len(lst)):
for j in range(len(lst)):
if i!=j and lst[::-1].startswith(lst):
result.append()
return result 本帖最后由 ouyunfu 于 2020-3-23 04:35 编辑
from itertools import permutations as p
def f357(words:list)->list:
L=[]
for i in p(range(len(words)),2):
a=words]+words]
if a[::-1]==a:
L.append(list(i))
return L 本帖最后由 ouyunfu 于 2020-3-23 04:42 编辑
尝试一行代码from itertools import permutations as p
def f357(w):
return ]+w])[::-1]==w]+w]] 先插个眼看大佬打架{:10_256:} from itertools import permutations
def fun357(words):
result = []
for i in permutations(,2):
combination = words] + words]
if combination == combination[::-1]:
result.append(,i])
return result 一行式
def fun357(lst):
if not len(lst):return 0
return [ for i in range(len(lst)) for j in range(len(lst)) if i!=j and lst[::-1].startswith(lst)] def huiwen(list1):
list2 = []
for i in range(len(list1)):
for j in range(len(list1)):
if j == i:
continue
else:
str1 = list1 + list1
if str1 == str1[::-1]:
list2.append((i,j))
return list2
list1 = ["abcd", "dcba", "lls", "s", "sssll"]
print(huiwen(list1))
def is_palindromic(str1, str2):
determine = str1 + str2
if determine == determine[::-1]:
return True
else:
return False
def joint_palindromic(words):
words_num = len(words)
result = []
for i in range(words_num):
for j in range(i+1, words_num):
if is_palindromic(words, words):
result.append()
if is_palindromic(words, words):
result.append()
return result def hw(x):
a = list(x)
if a == list(reversed(a)):
return 1
else:
return 0
def f357(x):
b = []
for i in range(len(x)):
for j in range(len(x)):
if i != j:
c = x + x
if hw(c) == 1:
b.append()
return b
先发一个暴力法,再看看能不能优化