鱼C论坛

 找回密码
 立即注册
楼主: zltzlt

[已解决]Python:每日一题 292

[复制链接]
发表于 2019-12-22 15:00:21 | 显示全部楼层
zltzlt 发表于 2019-12-22 09:44
有误,请再想想

str=input("输入")
if str[::-1]!=str[:]:
    print(str[::-1]+str[1:])
else:
    print(str)
input()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-12-22 15:01:46 | 显示全部楼层
133614 发表于 2019-12-22 15:00
str=input("输入")
if str[::-1]!=str[:]:
    print(str[::-1]+str[1:])

看清题哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-22 15:02:27 | 显示全部楼层

好吧,头疼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-22 15:38:05 | 显示全部楼层
def solve(s):
    def reverse_check(s):
        for i in range(len(s)//2):
            if s[i] != s[-1-i]:
                return False
        return True
    if reverse_check(s):
        return s
    else:
        for i in range(1, len(s)):
            if reverse_check(s[:-i]):
                return ''.join(reversed(s[-i:])) + s
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-12-22 16:02:06 | 显示全部楼层

还是会超时。。。

判断一个字符串是不是回文字符串,直接使用 s[::-1] == s 就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-22 16:17:49 From FishC Mobile | 显示全部楼层
zltzlt 发表于 2019-12-22 16:02
还是会超时。。。

判断一个字符串是不是回文字符串,直接使用 s[::-1] == s 就行

这样更快鸭,省掉了生成逆向序列的时间和空间
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-22 16:26:03 | 显示全部楼层
zltzlt 发表于 2019-12-22 16:02
还是会超时。。。

判断一个字符串是不是回文字符串,直接使用 s[::-1] == s 就行

行吧,试试这个
  1. def solve_2(s):
  2.     if s == s[::-1]:
  3.         return s
  4.     else:
  5.         for i in range(1, len(s)):
  6.             if s[:-i] == s[:-i][::-1]:
  7.                 return s[-1:-1-i:-1] + s
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 +2 收起 理由
zltzlt + 3 + 3 + 2 540 ms

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-22 19:12:39 | 显示全部楼层
大家帮忙看看最后一个函数,为什么老是不对呢????
前面两个函数我都实验过了,对的。最后一个好奇怪一直通不过~~~~~~
不知道循环为什么不停止。求教

  1. def palindrome(string): #建立一个判断回文字符串的函数
  2.     length = len(string)
  3.     for i in range(0, int(length/2 + 0.5)): #遍历前半个字符串(注意+0.5)
  4.         if string[i] != string[length-i-1]:
  5.             return False #如果不是回文字符串报错
  6.     return True  #如果是回文字符串报对

  7. def makeup(string, n):
  8. #在字符串前面添加n个字符 'abc',1 --> 'cabc', 'abc, 2' --> 'cbabc'
  9. #'abcd, 3' --> 'dcbabcd'
  10.     return ''.join(reversed(list(string[-n:]))) + string

  11. def shortest_palindrome(string): #产生最短字符串
  12.     length = len(string) #  
  13.     for i in range(0, length-1):
  14.         res = makeup(string, i)
  15.         if palindrome(res) == True:
  16.             break
  17.         else:
  18.             continue

  19.     return res
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-22 21:49:57 | 显示全部楼层

def solve(s):
    def reverse_check(s):
        for i in range(len(s)//2):
            if s != s[-1-i]:
                return False
        return True
    if reverse_check(s):
        return s
    else:
        for i in range(1, len(s)):
            if reverse_check(s[:-i]):
                return ''.join(reversed(s[-i:])) + s
out=solve("aacecaaa")
print(out)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-22 22:06:17 | 显示全部楼层
newbison 发表于 2019-12-22 19:12
大家帮忙看看最后一个函数,为什么老是不对呢????
前面两个函数我都实验过了,对的。最后一个好奇怪一 ...

奇怪,你的预期输出的值总是多一位。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-23 02:57:05 | 显示全部楼层
本帖最后由 CommonName 于 2019-12-23 19:06 编辑
  1. strs = input('请键入字符串: ')
  2. joint_str = ''
  3. if strs[::-1] == strs:
  4.     print(f"结果是: '{strs}'")
  5. else:
  6.     for s in strs:
  7.         if strs[0] != s:
  8.             result = f'''{strs.replace(f"{joint_str}",'')[::-1]}{joint_str}{strs.replace(f"{joint_str}",'')}'''
  9.             print(f"结果是: '{result}'")
  10.             break
  11.         else:
  12.             joint_str += s
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-23 09:13:18 | 显示全部楼层
  1. def fun219(n):
  2.     s = n.reverse()
  3.     return [s[:i]+n for i in range(len(n)) if s[i:] == n[0:len(n) - i]]

  4. print(fun('aacecaaa'))
  5. print(fun('abcd'))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-23 11:46:00 | 显示全部楼层
  1. def zuiduanhuiwenchuan(str1):
  2.     strs = [i for i in str1]
  3.     for i in range(len(str1)):
  4.         if strs[-i-1] != strs[i]:
  5.             strs.insert(i, strs[-i-1])
  6.         elif len(strs) == 2*i+1:
  7.             return "".join(strs)
  8.         else:
  9.             i += 1
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-23 11:51:58 | 显示全部楼层
本帖最后由 549491637 于 2019-12-23 11:55 编辑
  1. import time

  2. first = time.time()
  3. def zuiduanhuiwenchuan(str1):
  4.     if str1 == str1[::-1]:
  5.         return str1
  6.     strs = [i for i in str1]
  7.     for i in range(len(str1)):
  8.         if strs[-i-1] != strs[i]:
  9.             strs.insert(i, strs[-i-1])
  10.         elif len(strs) == 2*i+1:
  11.             return "".join(strs)
  12.         else:
  13.             i += 1

  14. a = zuiduanhuiwenchuan("")
  15. print(a)
  16. print(time.time()-first)
复制代码


啊啊啊,这次终于没有问题了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-23 16:04:07 | 显示全部楼层
本帖最后由 776667 于 2019-12-23 16:14 编辑
  1. def fun292(x):
  2.     for i in range(len(x)):
  3.         if x[:len(x)-1-i] == x[:len(x)-1-i][::-1]:
  4.             return x[len(x)-i-1:][::-1] + x
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-23 18:53:24 | 显示全部楼层
  1. def f292(s):
  2.     i = 1
  3.     n = len(s)
  4.     while i < n:
  5.         if s[-i::-1] != s[:n+1-i]:
  6.             i+=1
  7.         else:
  8.             break
  9.     return s[-1:-i:-1] + s
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-11 13:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表