变位词判断三种方式,一一比对,排序比对,字母计数方式



#list(str_name可以把字符串每个字符转换成列表的一个元素。注意str_name.split("分隔符")方法是按分隔符分割字符串,分开后每个区域作为一个列表元素
def match_onebyone(str1,str2):
    str_list1 = list(str1)
    str_list2 = list(str2)
    
    flag = 1

#注意这里如果要避免两个字符串内某个字母数量不一样的情况,需要找到后将str2中字符删除。删除后重新计算长度,不影响str1下一个字母比较。
#注意不能直接 for i in 5,需要用for i in range(5)    
#注意当for i in range(0)时,i不能取任何值,但是也不会报错。所以要考虑空列表的情况。

    for goal1 in str_list1:
        
        if flag ==1 and len(str_list2)!=0:
            for i in range(len(str_list2)):
                if goal1 == str_list2[i]:

                    del str_list2[i]
                    break
#这里注意一个删除找到字符后的问题,删除后就要break马上检查下一个,否则elif里面可能会报错,因为len(str2)变了。
#注意这里要考虑两个字符串长度不同的问题,也可以一开始检查长度或者比对后检查长度。

                elif goal1 != str_list2[i] and i ==(len(str_list2)-1):
                    #print (i)
                    #print (str_list2[i])
                    flag = 0
                    print ("字母",goal1,"没有找到,不是换位词")
                    
        elif len(str_list2)==0:
            flag = 0
            print ("字母",goal1,"没有找到,不是换位词")
            break
    
    if flag ==1 and len(str_list2)==0:
        print (str1,"和",str2,"是换位词")
        
    elif flag ==1 and len(str_list2)!=0:
        print(str2,"比",str1,"长,不是换位词")
      
#str1 = "Testwords"
#print (list(str1))



#match_onebyone(a,b)

def sort_words(str1,str2):

    str_list1 = list(str1)
    str_list2 = list(str2)
    
    str_list1.sort()
    str_list2.sort()
    
    if str_list1 == str_list2:
        print(str_list1,"和",str_list2,"是换位词")
    else:
        print(str_list1,"和",str_list2,"不是换位词")
    

#sort_words(a,b)


# ord("字符")表示该字符对应的unicode编码,支持汉字。
def count_words(str1,str2):
    str_list1 = list(str1)
    str_list2 = list(str2)
    #print (str_list1,str_list2)
    #特别注意不能用list1=list2=[0]*26的格式,否则这两个变量会一直相等
    list1,list2 = [0]*26,[0]*26

    for i in str_list1:
        
        location = ord(i)-ord('A')
        list1[location] = list1[location]+1

    print("-----------------------")
    for i in str_list2:

        location = ord(i)-ord('A')
        list2[location]+=1  

    print (list1,list2)
    if list1 ==list2:
        print("OK")
    else:
        print("NG")
    
    
a ="AABBZZ"
b ="AABBZZ"
count_words(a,b)
#注意以上算法(时间)复杂度分别为O(n^2),O(nlogn),O(n),第三种方法是用空间换时间。
#第二种算法主要花费的排序上,python是用的快排(O(nlog(n)))
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值