LeetCode - 親密字符串
Title:
给定两个由小写字母构成的字符串A和B,只要我们可以通过交换A中的两个字母得到与B相等的结果,就返回true;否则返回false。
Input:
A = "ab", B = "ba"
Output:
true
From: LeetCode
分析
1. A不等于B时:
- I. 长度必须保持一致
- II. 组成元素保持一致
- III. 两者之间的差异值必须为2(
ab、ba
)
这里利用正则表达式逐一查询B中相同位置的元素是否与A相同,返回一个由True、False组成的列表,False表示相同位置元素不一致,即有一个差异值,这里只要保证False数量为2即可
2. A等于B时:
- I. 不为空
- II. 字符串内耽搁元素重复数量至少为2 (
aa、aba、abab
)
这里先将A去重之后再查询其中的元素在初始字符串中出现的次数,返回由次数构成的列表,只要列表元素最大值大于等于2即可
代码
#!/usr/bin/env python
# -*- coding:utf-8 -*-
'''
@author: maya
@software: Pycharm
@file: intimateStrings.py
@time: 2019/7/24 8:31
@desc:
'''
'''
Title:
给定两个由小写字母构成的字符串A和B,只要我们可以通过交换A中的两个字母得到与B相等的结果,就返回true;否则返回false。
Input:
A = "ab", B = "ba"
Output:
true
From: LeetCode
'''
import re
class Solution(object):
def buddyStrings(self, A, B):
"""
:type A: str
:type B: str
:rtype: bool
"""
equal_result = [True if re.search(data, B[A.index(data)]) else False for data in A]
num_result = [len(re.findall(data, A)) for data in list(set(A))]
return True if (A != B and (len(A) == len(B)) and (set(A) == set(B) and equal_result.count(False) == 2)) \
or (A == B != "" and max(num_result) >= 2) else False
點(diǎn)擊查看更多內(nèi)容
1人點(diǎn)贊
評(píng)論
評(píng)論
共同學(xué)習(xí),寫(xiě)下你的評(píng)論
評(píng)論加載中...
作者其他優(yōu)質(zhì)文章
正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得
100積分直接送
付費(fèi)專(zhuān)欄免費(fèi)學(xué)
大額優(yōu)惠券免費(fèi)領(lǐng)