字符串中的Python字符匹配

bpsygsoo  于 2023-02-10  发布在  Python
关注(0)|答案(8)|浏览(122)

编写一个函数repfree(s),该函数将字符串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")
2ledvvac

2ledvvac1#

满足这一要求的一个简单方法是使用正则表达式。您可能不被允许使用它们,但如果可以,请考虑以下情况:

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

laawzig22#

信不信由你,这个问题可以在O(1)时间内解决,因为每个足够大的字符串都至少包含一个重复字符,毕竟不同的Unicode字符的数量是有限的,所以一个字符串不能任意长,同时每个Unicode字符最多使用一次。
例如,如果您碰巧知道字符串仅由小写字母组成,则可以执行以下操作:

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

否则,可以用字符串可能包含的任意字符数替换26;例如用于大写和小写字母和数字的62
截至2020年2月,整个Unicode有137,994个不同字符(Wikipedia),所以如果你的字符串长度是150,000,那么你可以返回True而不需要搜索。

44u64gxh

44u64gxh3#

试试看

chars = 'abcdefghijklmnopqrstuvwxyz'
def repfree(s):
    for char in chars:
        count = s.count(char)
        if count > 1:
            return False
    return True

但是,这是一个很长的路要走,因为它扫描列表26次。一个更好的和Python的方式将是

import collections
def repfree(s):
    results = collections.Counter(s)
    for i in results:
        if results[i] > 1:
            return False
    return True

这里,results是将s的所有字符作为关键字、将其频度作为值的字典,如果有大于1的值,则判断是否发生了重复。

cvxl0en2

cvxl0en24#

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

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

5anewei65#

可以通过删除for循环来提高方法的效率。

len(s) == len(set(s))

否则,请尝试使用任何

any(s.count(c) > 1 for c in s)
xoshrz7s

xoshrz7s6#

你可以这样做:
方法一:

def repfree(s):
  if len(set(s)) == len(s):
    return True
  return False

方法二:

def repfree(s):

  return len(set(s)) == len(s)

为什么是set
set将按排序顺序返回字符串中所有唯一字符的列表
示例:

set('shubham')

输出:

{'a', 'b', 'h', 'm', 's', 'u'}

因此,如果字符串中的一个字符出现多次,它将不等于字符串本身的长度。

quhf5bfb

quhf5bfb7#

def repfree(str):
l=list(str)
for i in range(len(l)):
    check=str.count(l[i])
    if check>1:
        flag=1
    else:
        flag=0
if(flag==1):
    return False
else:
    return True
92dk7w1h

92dk7w1h8#

def匹配(s):stack = [],用于秒中字符:如果字符== '(':堆栈.append(字符)elif字符== ')':如果不堆叠:return False stack.pop()返回非堆栈

相关问题