字符串中的Python字符匹配

2024-09-28 01:27:16 发布

您现在位置:Python中文网/ 问答频道 /正文

编写一个函数repfree,该函数以字符串s作为输入,并检查是否有任何字符出现多次。如果没有重复,函数应返回True,否则返回False

我已经试过了,但我觉得这不是一个有效的解决方法。你能推荐一个有效的代码吗,谢谢

def repfree(s):
    newlist = []
    for i in range(0, len(s)):
        newlist.append(s[i])
    newlist2 = set(newlist)
    if len(newlist) == len(newlist2):
        print("True")
   else:
        print("False")

Tags: 方法函数字符串代码infalsetruefor
3条回答

您可以将字符串拆分为set并比较长度

def repfree(s):
    se = set(string)
    print(len(se) == len(s))

信不信由你,这个问题可以在O(1)时间内解决,因为每个足够大的字符串至少包含一个重复字符。毕竟,不同的Unicode字符的数量有限,因此一个字符串不能任意长,同时最多使用一次每个Unicode字符

例如,如果您碰巧知道字符串仅由小写字母组成,则可以执行以下操作:

def has_repeated_char(s):
    return len(s) > 26 or len(s) != len(set(s))

否则,您可以用字符串可能包含的任何数量的字符替换26;e、 g.62表示大小写字母和数字

截至2020年2月,整个Unicode有137994个不同字符(Wikipedia),因此如果字符串长度为150000,则可以返回True,而无需搜索

满足此要求的一个简单方法是使用正则表达式。你可能不允许使用它们,但是如果你可以,那么考虑这个:

def repfree(s):
    if re.search(r'^.*(.).*\1.*$', s):
        print("True")
    else:
        print("False")

相关问题 更多 >

    热门问题