鱼C论坛

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

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

[复制链接]
 楼主| 发表于 2020-3-3 21:34:10 | 显示全部楼层
kinkon 发表于 2020-3-3 21:05
感觉还是第一种方法快一点,少了个循环

解答错误

输入:"aabb"
输出:False
预期结果:True
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 21:40:32 | 显示全部楼层
zltzlt 发表于 2020-3-3 21:34
解答错误

输入:"aabb"

越来越迷糊了,现在对了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 21:50:53 | 显示全部楼层
def func342(n):
    count = 0
    flag = 0
    list1 = list(n)
    list2 = sorted(set(list1),key=list1.index)
    for i in list2:
        if list1.count(i) == 2:
            continue
        elif list1.count(i)>2:
            flag = 1
            break
        elif list1.count(i) == 1:
            count += 1
            if count == 2:
                break
    if count == 2 or flag == 1:
        return False
    return True

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
zltzlt + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2020-3-3 22:03:40 | 显示全部楼层
本帖最后由 wuqramy 于 2020-3-4 12:41 编辑

好像不止一个用字典的呢
  1. def hwstr():
  2.     n = input('n = ')
  3.     count = 0
  4.     dict1 = {}
  5.     for each in n:
  6.         if each not in dict1.keys():
  7.             dict1[each] = 0
  8.         else:
  9.             dict1[each] += 1
  10.     for each in dict1.values():
  11.         if each % 2 == 0:
  12.             count += 1
  13.     if count > 1:
  14.         print('False')
  15.     else:
  16.         print('True')
  17. hwstr()
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

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

使用道具 举报

发表于 2020-3-3 22:13:26 | 显示全部楼层
wuqramy 发表于 2020-3-3 22:03
好像不止一个用字典的呢

字典,快准狠!

@zltzlt
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 23:41:04 From FishC Mobile | 显示全部楼层
#<
def fun342():
    str1 = input()
    k=0
    for i in set(str1):
        k+=str1.count(i)%2
    print(k>2)
#>

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
zltzlt + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2020-3-3 23:41:27 | 显示全部楼层
本帖最后由 Lyton_ 于 2020-3-4 00:07 编辑
  1. def fun342(str1):
  2.     count=0
  3.     for each in str1:
  4.         count+=str1.count(each)%2      
  5.     if count>1:
  6.         print('False')
  7.     else:
  8.         print('True')


  9. str1=input('请输入需要判断的字符串:')
  10. fun342(str1)
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
zltzlt + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2020-3-3 23:45:28 | 显示全部楼层

  1. def fun342():
  2.     str1 = input()
  3.     k=0
  4.     for i in set(str1):
  5.         k+=str1.count(i)%2
  6.     print(k>2)
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
zltzlt + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2020-3-4 02:33:08 | 显示全部楼层
本帖最后由 Python3005 于 2020-3-4 02:34 编辑
  1. import collections
  2. def fun(s):
  3.         lst = collections.Counter(s).values()
  4.         lst = list(filter(lambda x : x % 2, lst))
  5.         return len(lst) < 2
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

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

使用道具 举报

发表于 2020-3-4 08:28:54 | 显示全部楼层
  1. def five(ing:str):
  2.     if len(ing)==1:
  3.         return True
  4.     ing=list(ing)
  5.     if len(ing)==2*len(set(ing)) or (len(ing)%2!=0 and len(ing)==2*int(len(set(ing)))-1):
  6.         return True
  7.     return False
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
zltzlt + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2020-3-4 08:58:03 | 显示全部楼层
  1. def fun_342(str1):
  2.     flag = 0
  3.     for i in str1:
  4.         if i in dict1:
  5.             dict1[i] += 1
  6.         else:
  7.             dict1[i] = 1
  8.     for i in dict1.values():
  9.         if i % 2:
  10.             flag += 1
  11.     if flag<2:
  12.         return True
  13.     else:
  14.         return False
  15. dict1 ={}
  16. str1 = input()
  17. print(fun_342(str1))
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

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

使用道具 举报

发表于 2020-3-4 12:07:24 | 显示全部楼层
这种算吗:
输入:"Tactcoa"
输出:True
解释:排列有 "Tacocat"、"atcocTa",等等
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-4 12:08:39 | 显示全部楼层
一个账号 发表于 2020-3-4 12:07
这种算吗:
输入:"Tactcoa"
输出:True

区分大小写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-4 12:17:23 | 显示全部楼层
严重超时

  1. from itertools import permutations as p
  2. def func(str1):
  3.     list1 = []
  4.     for letter in str1:
  5.         list1.append(letter)
  6.     for lst in p(list1):
  7.         if lst[::-1] == lst:
  8.             return True
  9.     return False
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-4 12:18:15 | 显示全部楼层
  1. def f342(strinfo):
  2.     temstr = list(strinfo)
  3.     odd_num = 0
  4.     while len(temstr)>0:
  5.         firstnum = temstr[0]
  6.         del temstr[0]
  7.         if firstnum in temstr:
  8.             p=temstr.index(firstnum)
  9.             del temstr[p]
  10.         else:
  11.             odd_num +=1
  12.         if odd_num > 1:
  13.             return False
  14.     if odd_num==0:
  15.         return True
  16.     elif len(strinfo)%2 == 1:
  17.         return True
  18.     else:
  19.         return False
  20.    
  21. strinfo = list(input('请输入一个字符串:'))
  22. if  f342(strinfo):
  23.     print('是回文串。')
  24. else:
  25.     print('不是回文串。')
复制代码


单个字符也算是回文串吧

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
zltzlt + 4 + 4 没有鱼币了~~~

查看全部评分

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

使用道具 举报

 楼主| 发表于 2020-3-4 12:18:40 | 显示全部楼层

不要使用 itertools
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-4 12:37:44 | 显示全部楼层

题目要求写一个函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-4 12:41:33 | 显示全部楼层
一个账号 发表于 2020-3-4 12:37
题目要求写一个函数

已改,谢谢提醒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-4 19:25:34 | 显示全部楼层
str1 = input('输入:')
str2 = ''
str3 = ''
list1 = []
for a in str1:
    if not(a in str2):
        str2 += a
        
number1 = 0
for i in range(len(str2)):
    if number1 >= 2:
        break
    else:
        a = str1.count(str2[i])
        list1.append(a)
        if (a%2) != 0:
            number2 = i
            number1 += 1
            
if number1 >= 2:
    print('输出:False')
else:
    if (len(str1)%2) == 0:
        for a in range(len(list1)):
            if list1[a]/2-1 != 0:
                for b in range(list1[a]/2-1):
                    str2 += str2[a]
        for c in range(len(str2),-1,-1):
            str2 += str2[(c-1):c]
        print('输出:True')
        print('解释:排列有“%s”,等等'%str2)
    else:
        str3 = str2[i:(i+1)]
        str2 = str2[:i]+str2[(i+1):]
        list1.remove(1)
        for a in range(len(list1)):
            if list1[a]/2-1 != 0:
                for b in range(list1[a]/2-1):
                    str2 += str2[a]
        str2 += str3
        for c in range(len(str2)-1,-1,-1):
            str2 += str2[(c-1):c]
        print('输出:True')
        print('解释:排列有“%s”,等等'%str2)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2020-3-4 19:39:36 | 显示全部楼层
萌新在这里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 16:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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