PTA - sdut-判断两个字符串是否为变位词

如果一个字符串是另一个字符串的重新排列组合,那么这两个字符串互为变位词。

比如,"heart" 与 "earth" 互为变位词,"Mary" 与 "arMy" 也互为变位词。“Hello world"与“worldHello"不是变位词。

输入格式:

第一行输入第一个字符串;

第二行输入第二个字符串。

输出格式:

若是变位词,输出:yes;否则,输出:no。

输入样例1:

Mary
arMy

输出样例1:

yes

输入样例2:

hello world
world hello

输出样例2:

yes

输入样例3:

I am very good.
verygood I am.

输出样例3:

no

我的答案:

方法一:

遍历

string1 = input()
string2 = input()

for i in string1:
    if (i not in string2):
        print("no")
        break
else:
    print("yes")

方法二:

使用 set 和 len

string1 = input()
string2 = input()

# 去除空格并转换为小写
string1 = string1.replace(' ', '').lower()
string2 = string2.replace(' ', '').lower()

# 判断长度是否相等
if len(string1) != len(string2):
    print("no")
else:
    # 使用 set 统计字符出现次数
    if set(string1) == set(string2):
        print("yes")
    else:
        print("no")

方法三:

使用排序

string1 = input()
string2 = input()

# 去除空格并转换为小写
string1 = string1.replace(' ', '').lower()
string2 = string2.replace(' ', '').lower()

# 判断长度是否相等
if len(string1) != len(string2):
    print("no")
else:
    # 对字符串排序
    sorted_string1 = sorted(string1)
    sorted_string2 = sorted(string2)

    # 比较排序后的字符串
    if sorted_string1 == sorted_string2:
        print("yes")
    else:
        print("no")
  1. 输入字符串:

    • string1 = input() 获取第一个字符串。
    • string2 = input() 获取第二个字符串。
  2. 预处理字符串:

    • string1 = string1.replace(' ', '').lower() 去除第一个字符串中的空格并将其转换为小写字母。
    • string2 = string2.replace(' ', '').lower() 去除第二个字符串中的空格并将其转换为小写字母。
  3. 判断长度:

    • if len(string1) != len(string2): 检查两个字符串的长度是否相等。如果不相等,则直接输出 "no" 并结束程序。
  4. 排序字符串:

    • sorted_string1 = sorted(string1) 对第一个字符串进行排序,并将排序后的结果存储在 sorted_string1 中。
    • sorted_string2 = sorted(string2) 对第二个字符串进行排序,并将排序后的结果存储在 sorted_string2 中。
  5. 比较排序结果:

    • if sorted_string1 == sorted_string2: 检查两个排序后的字符串是否相等。如果相等,则输出 "yes",表示两个字符串是变位词;否则,输出 "no"。

方法四:

使用字典

string1 = input()
string2 = input()

# 去除空格并转换为小写
string1 = string1.replace(' ', '').lower()
string2 = string2.replace(' ', '').lower()

# 判断长度是否相等
if len(string1) != len(string2):
    print("no")
else:
    # 使用字典统计字符出现次数
    char_count = {}
    for char in string1:
        if char in char_count:
            char_count[char] += 1
        else:
            char_count[char] = 1

    for char in string2:
        if char in char_count:
            char_count[char] -= 1
        else:
            char_count[char] = -1

    # 判断字典中所有值是否都为 0
    if all(value == 0 for value in char_count.values()):
        print("yes")
    else:
        print("no")
  1. 输入字符串: 与之前代码相同。
  2. 预处理字符串: 与之前代码相同。
  3. 判断长度: 与之前代码相同。
  4. 使用字典统计字符出现次数:
    • 创建一个空的字典 char_count,用于存储每个字符出现的次数。
    • 遍历第一个字符串,如果字符已经存在于字典中,则将对应的计数增加 1;否则,将字符添加到字典中,并将其计数设置为 1。
    • 遍历第二个字符串,如果字符已经存在于字典中,则将对应的计数减少 1;否则,将字符添加到字典中,并将其计数设置为 -1。
  5. 判断字典中所有值是否都为 0:
    • 使用 all(value == 0 for value in char_count.values()) 判断字典中所有值是否都为 0。如果都为 0,则输出 "yes",表示两个字符串是变位词;否则,输出 "no"。

方法五:

使用 collections.Counter

from collections import Counter

string1 = input()
string2 = input()

# 去除空格并转换为小写
string1 = string1.replace(' ', '').lower()
string2 = string2.replace(' ', '').lower()

# 使用 Counter 统计字符出现次数
counter1 = Counter(string1)
counter2 = Counter(string2)

# 判断字符出现次数是否相同
if counter1 == counter2:
    print("yes")
else:
    print("no")
  1. 输入字符串: 与之前代码相同。
  2. 预处理字符串: 与之前代码相同。
  3. 使用 Counter 统计字符出现次数:
    • counter1 = Counter(string1) 使用 Counter 类统计第一个字符串中每个字符出现的次数。
    • counter2 = Counter(string2) 使用 Counter 类统计第二个字符串中每个字符出现的次数。
  4. 判断字符出现次数是否相同:
    • if counter1 == counter2: 使用 == 比较两个 Counter 对象,如果它们包含的字符及其出现次数都相同,则输出 "yes",表示两个字符串是变位词;否则,输出 "no"。

方法六:

使用 collections.Counter 的 subtract 方法

from collections import Counter

string1 = input()
string2 = input()

# 去除空格并转换为小写
string1 = string1.replace(' ', '').lower()
string2 = string2.replace(' ', '').lower()

# 使用 Counter 统计字符出现次数
counter1 = Counter(string1)
counter2 = Counter(string2)

# 使用 subtract 方法判断字符出现次数是否相同
counter1.subtract(counter2)
if all(count == 0 for count in counter1.values()):
    print("yes")
else:
    print("no")
  1. 输入字符串: 与之前代码相同。
  2. 预处理字符串: 与之前代码相同。
  3. 使用 Counter 统计字符出现次数: 与之前代码相同。
  4. 使用 subtract 方法判断字符出现次数是否相同:
    • counter1.subtract(counter2) 使用 subtract 方法将 counter2 中的字符出现次数从 counter1 中减去。
    • if all(count == 0 for count in counter1.values()): 判断 counter1 中所有字符的计数是否都为 0。如果都为 0,则输出 "yes",表示两个字符串是变位词;否则,输出 "no"。
  • 24
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值