# 第33期-亲密字符串

Python是一门需要不断实践练习的编程语言,本文档将AI大学堂学员交流群的Python每周练习进行汇总,希望各位小伙伴能够多进行实践练习,逐渐爱上这门神奇的编程语言,掌握它并在生活中能够使用它。

# 1 问题描述

有两个字符串,A和B,如果A字符串内部交换两个位置的字符就能够让A和B相等,就认为两个字符串是亲密字符串
一共有两种情况


一是两个字符串完全相等。
在这种情况下,我们需要在一个字符串中寻找两个相同的字母的索引,交换这两个字母的位置,这两个字符串还是相等的。


二是这两个字符串不相等的情况。
首先,比较这两个字符串,找出这两个字符串不相等的字母的位置。然后统计字母不一样的数量是否为2(只需要交换两个字母的位置),如果大于2则不是亲密字符串。找到不一样的字母以后,在字符串A中交换这两个字母的位置,然后比较是否相等,相等则是亲密字符串

输入两个字符串,判断他们是不是亲密字符串!

# 2 解题思路

  • 用input函数请用户输入两个字符串
  • 需要判断两者长度是否相等,长度不等一定不是亲密字符串
  • 若两者相等,只需要字符串中有两个相同的元素便可以了
  • 可以找到两个不相等的字符,将两者交换,若交换后两字符串相等,则是亲密字符串

# 3 解题方法

A = list(str(input('请输入字符串A:')))
B = list(str(input('请输入字符串B:')))
if len(A)!=len(B):
    print('两者不是亲密字符串')
elif A == B and len(list(set(A)))<len(A):
    print('两者是亲密字符串')
else:
    n=0
    for i in range(len(A)):
        for j in range(len(B)):
            if n==0 and i!=j and A[i]!=B[i] and A[j]!=B[j]:
                A[i],A[j]=A[j],A[i]
                n+=1
    if A==B:
        print('两者是亲密字符串')
    else:
        print('两者不是亲密字符串')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

第1-2行: 定义变量A与B,用input函数使用户输入字符串,str函数将其转换为字符串类型,并用list函数转化为列表
第3-4行: 若两者长度不相等,必定不是亲密字符串
第5-6行: 若两者完全一样且字符串内有重复元素,打印其是亲密字符串
第7-10行: 若上面两种情况均不满足,则用for函数遍历字符串中的元素,选择两者不相同的地方并进行交换,n用来保证只交换一次
第11-12行: 判断两着是否相同,若是则两者是亲密字符串
第13-14行: 若不相同,则打印两者不是亲密字符串

set() 函数
set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
语法:
set([iterable])
参数说明:
iterable -- 可迭代对象对象;

代码运行结果为:
image.png

# 小思考

else:
    n=0
    for i in range(len(A)):
        for j in range(len(B)):
            if n==0 and i!=j and A[i]!=B[i] and A[j]!=B[j]:
                A[i],A[j]=A[j],A[i]
                n+=1
')
1
2
3
4
5
6
7
8

这段语句中,n的作用很不明显,你能举例说明去掉n后判断不准的情况吗

# 4 视频解析

高清视频讲解,请查看AI大学堂Python基础实战100例 (opens new window)
关注『讯飞AI大学堂』公众号,发送 python100 即可领取Python基础实战100例源代码

AI大学堂公众号.png

更新于: 12/28/2021, 7:43:14 AM