变位词py

1.变位词查找

将字符串拆分放到列表中

一一排序进行查找

def anagramsolution(s1,s2):
    alist = list(s1)
    alist = list(s2)
    
    alist1.sort()
    alist2.sort()
    pos = 0 
    matches = True
    while pos < len(s1) and matches:
        if alist1[pos] == alist2[pos]:
            pos = pos + 1     
        else:
            matches = False 
        return matches 
#将这个字符串拆开,sort函数排序然后逐一比较,从而得到是否为变位词

复杂度 O(nlogn)

2.

这段代码实现了一个判断两个字符串是否为字母变位词(anagram)的算法。下面是算法的实现逻辑:

  1. 首先,创建两个长度为26的列表c1和c2,分别用于记录字符串s1和s2中每个字母出现的次数。初始化列表中的元素都为0。

  2. 遍历字符串s1,对于每个字符,通过将其转换为ASCII码并减去字母'a'的ASCII码,得到字符在列表中的位置pos。然后,将c1[pos]的值加1,表示该字符在s1中出现的次数。

  3. 初始化变量j为0,用于遍历列表c1和c2。

  4. 初始化变量stillok为True,表示两个字符串仍然被认为是字母异位词。

  5. 进入一个循环,条件是j小于26且stillok为True。在循环中,检查c1[j]是否等于c2[j],即判断两个字符串中第j个字母出现的次数是否相等。

  6. 如果c1[j]等于c2[j],则说明两个字符串中第j个字母的出现次数相等,将j的值加1,继续下一个位置的判断。

  7. 如果c1[j]不等于c2[j],则说明两个字符串中第j个字母的出现次数不相等,将stillok置为False,表示两个字符串不是字母异位词。

  8. 循环结束后,返回变量stillok的值,表示两个字符串是否为字母变位词。如果stillok为True,则表示两个字符串是字母异位词;如果stillok为False,则表示两个字符串不是字母异位词。

def anangramsolution(s1,s2)
    c1 = [0]*26 #创建一个长度为26的列表初始值为0
    c2 = [0]*26
    for i in range(len(s1)):
        pos = ord(s1[i]) - ord('a')#ord函数返回ascii码
        c1[pos] = c2[pos] + 1 #这里的意思是ascii码相减后就是从[0,25]然后每次循环若pos值一样则加1,这样就可以计算出这个字母到底出现了几次。
    j = 0
    stillok = True
    while j < 26 and stillok
        if c1[j] == c2[j]:
            j = j + 1
        else:
            stillok = False
    return stillok
            

复杂度O(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值