zltzlt 发表于 2020-3-22 21:17:08

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-22 21:31:19

本帖最后由 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]#剔除自洽

wcshds 发表于 2020-3-22 21:32:36

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

sunrise085 发表于 2020-3-22 21:38:13

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"]))

蒋博文 发表于 2020-3-22 21:48:58

先占楼,昨天的没看到{:10_266:}都解决了,没法回答了

l0stparadise 发表于 2020-3-22 21:56:14

一个愚蠢的方法
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

蒋博文 发表于 2020-3-22 22:05:58

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-22 22:06:51

本帖最后由 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

风魔孤行者 发表于 2020-3-22 22:22:36

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-22 22:30:50

本帖最后由 永恒的蓝色梦想 于 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 22:44:58

本帖最后由 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:}

fan1993423 发表于 2020-3-23 00:43:30

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:25:08

本帖最后由 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:40:39

本帖最后由 ouyunfu 于 2020-3-23 04:42 编辑

尝试一行代码from itertools import permutations as p
def f357(w):
    return ]+w])[::-1]==w]+w]]

xiaomei47580 发表于 2020-3-23 07:27:45

先插个眼看大佬打架{:10_256:}

776667 发表于 2020-3-23 12:16:06

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

fan1993423 发表于 2020-3-23 12:48:18

一行式
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)]

黎影 发表于 2020-3-23 13:08:08

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))

旅途Z 发表于 2020-3-23 13:08:25


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

mdphd 发表于 2020-3-23 13:10:27

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
先发一个暴力法,再看看能不能优化
页: [1] 2 3
查看完整版本: Python:每日一题 357