一个账号 发表于 2020-3-27 18:38:57

zltzlt 发表于 2020-3-27 18:37


原题是:给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回 true ;否则返回 false 。

March2615 发表于 2020-3-27 18:40:38

zltzlt 发表于 2020-3-27 18:36
解答错误

输入:a = "abab", b = "abab"


这不是可以把a中的两个a交换位置吗?
感觉今天的题想不到的情况有点多啊

永恒的蓝色梦想 发表于 2020-3-27 18:44:37

zltzlt 发表于 2020-3-27 18:38


写完🌶{:10_256:}

一个账号 发表于 2020-3-27 18:46:08

本帖最后由 一个账号 于 2020-3-27 18:53 编辑

class Solution:
    def buddyStrings(self, A: str, B: str) -> bool:
      if len(A) != len(B): return False
      if A == B and len(set(A)) < len(A): return True
      dif = [(a, b) for a, b in zip(A, B) if a != b]
      return len(dif) == 2 and dif == dif[::-1]

ouyunfu 发表于 2020-3-27 18:46:36

更正def f360(a:str,b:str)->bool:
    m,n = len(a),len(b)
    L=!=b]
    if m!=n:
      return False
    elif a==b:
      if list(a)==list(reversed(a)):
            return True
      else: return False
    elif a[:L]+a]+a+1:L]+a]+a+1:]==b:
      return True
    else: return False
   

zltzlt 发表于 2020-3-27 18:47:41

ouyunfu 发表于 2020-3-27 18:46
更正

解答错误

输入:a = "", b = ""
输出:True
预期结果:False

ouyunfu 发表于 2020-3-27 18:51:27

zltzlt 发表于 2020-3-27 18:47
解答错误

输入:a = "", b = ""


谢谢提示,已改
def f360(a:str,b:str)->bool:
    m,n = len(a),len(b)
    L=!=b]
    if m!=n:
      return False
    elif a==b:
      if a=='':
            return True
      elif list(a)==list(reversed(a)):
            return True
      else: return False
    elif a[:L]+a]+a+1:L]+a]+a+1:]==b:
      return True
    else: return False

March2615 发表于 2020-3-27 18:54:33

本帖最后由 March2615 于 2020-3-27 19:09 编辑

zltzlt 发表于 2020-3-27 18:28
解答错误

输入:a = "aa", b = "aa"


def daily360(a: str, b: str) -> bool:
    # 如果两个字符串不同
    # 1. 长度不同 -> 不可互换
    # 2. 不同的地方大于2 -> 不可互换
    # 3. 不同的地方字母不同 -> 不可互换
    # 如果两个字符串相同
    # 1. 字符串内有相同字符 -> 可以互换
    # 2. 字符串内无相同字符 -> 不可互换
    # 3. 字符串长度小于2 -> 不可互换
    if a != b:
      if len(a) != len(b): # 长度不同
            return False
      temp = []
      for i in range(len(a)):
            if a != b:
                temp.append(a)
                temp.append(b)
      # !=4->不同的地方大于2
      # 不是对称的说明不同的地方字母不同
      if len(temp) != 4 or list(reversed(temp)) != temp:
            return False
      else:
            return True
    else:
      if len(a) < 2:
            return False
      temp = {}
      for each in a:
            if each in temp:
                return True
            temp = 1
      return False

抱歉注释有点多,怕没考虑到某些情况

塔利班 发表于 2020-3-27 19:38:02

def f360(a,b):
    if len(a)!=len(b):
      return False
    t=0
    l=[]
    for i in range(len(a)):
      if a!=b:
            t+=1
            if t>2:
                return False
            l.append(,b])
    if not t:
      return True
    elif t==2:
      return l==l[-1][::-1]
    else:
      return False

TJBEST 发表于 2020-3-27 20:43:22

本帖最后由 TJBEST 于 2020-3-27 21:19 编辑

来个没效率的
def fun360(a,b):
    if len(a) != len(b):
      return False
    M = len(a)
    index_arr = !=b]
    if len(index_arr) == 2:
      if a] == b] and a] == b]:
            return True
      else:
            return False
    elif len(index_arr) == 0:
      for index in range(0,M-1):
            if a == a:
                return True
      return False
    else:
      return False

whosyourdaddy 发表于 2020-3-27 21:16:53

def func360(a,b):
    if len(a) != len(b):
      return False
    count = 0
    temp = []
    for i in range(len(a)):
      if a != b:
            print("different")
            count +=1
            if count > 2:
                return False
            temp.append(a)
            temp.append(b)
    if count ==1:
      return False
    elif count ==0:
      tempa = "".join(set(a))
      if len(tempa) != len(a):
            return True
      return False
    elif count == 2:
      if temp[:2] == temp[:1:-1]:
            return True
      return False

BngThea 发表于 2020-3-27 21:23:12

本帖最后由 BngThea 于 2020-3-30 19:14 编辑

def cmp(str1,str2):
    if len(str1) != len(str2):
      return False
    elif set(str1) != set(str2):
      return False
    else:
      tmp=[(x,y) for x,y in zip(str1,str2) if x != y]
      if not tmp:
            if len(set(str1)) == len(str1):
                return False
            else:
                return True
      return len(tmp) == 2 and tmp[::-1] == tmp
    pass

Herry2020 发表于 2020-3-27 21:41:36

c = "abcd"
d = "abcd"
def fun360(a,b):
    a = list(a)
    b = list(b)
    list1 = []
    list2 = []
    n = len(a)
    m = len(d)
    result = False
    if n != m:
      result = False
    elif a == b:
      for i in range(n):
            if a.count(a) >= 2:
                result = True
    else:
       for i in range(n):
            if a != b:
                list1.append((a))
                list2.append(b)

            if len(list1) != len(list2) or len(list1) != 2 :
                result = False
            else:
                if list1 == list2 and list1 == list2:
                  result =True
    return result

print(fun360(c, d))

旅途Z 发表于 2020-3-28 11:08:26

def switch_equal(str1, str2):
    length = len(str1)
    diff_list = []
    if length != len(str2):
      return False
    for index in range(length):
      if str1 != str2:
            diff_list.append(index)
    if len(diff_list) == 0:
      return str1 == "" or len(str1) != len(set(str1))
    elif len(diff_list) == 2:
      return str1] == str2] and str1] == str2]
    else:
      return False

flamezyy 发表于 2020-3-28 13:22:14

本帖最后由 flamezyy 于 2020-3-28 13:31 编辑

def f360(a,b):
    base = []
    comp = []
    times = 0
    if (len(a) != len(b)) or (len(a) == 0):
      return False
    if a == b:
      return True
    for i in range(len(a)):
      if a != b:
            base.append(a)
            comp.append(b)
            times += 1
      if times > 2:
            return False
    comp.reverse()
    if base == comp:
      return True
    else:
      return False

mdphd 发表于 2020-3-28 20:24:08

def f360(a,b):
    if len(a) != len(b):
      return False
    else:
      d = []
      for i in range(len(a)):
            if a != b:
                d.append(i)
      c = len(d)
      if c == 0:
            if len(a) == len(set(a)):
                return False
            else:
                return True
      elif c == 2 and a] == b] and a] == b]:
            return True
      else:
            return False

l0stparadise 发表于 2020-3-28 20:48:28

本帖最后由 l0stparadise 于 2020-3-28 21:20 编辑

def f360(a,b):
    if len(a) != len(b):
      return False
    if len(a) < 2 or len(b) < 2:
      return False
    list_a_dif = []
    list_b_dif = []
    list_a_same = []
    list_b_same = []
    for i in range(len(a)):
      if a != b:
            list_a_dif.append(a)
            list_b_dif.append(b)
      else:
            list_a_same.append(a)
            list_b_same.append(b)
    if len(list_a_dif) != len(list_b_dif):
      return False
    if len(list_a_dif) == len(list_b_dif) == 0:
      if len(set(list_a_same)) < len(list_a_same):
            return True
      else:
            return False
    if len(list_a_dif) == len(list_b_dif) == 2:
      if list_a_dif == list_b_dif[::-1]:
            return True
      else:
            return False
    else:
      return False

蒋博文 发表于 2020-3-28 21:51:29

先占楼。楼主,你先别揭帖。我还想答题{:5_96:}

zltzlt 发表于 2020-3-29 08:06:38

蒋博文 发表于 2020-3-28 21:51
先占楼。楼主,你先别揭帖。我还想答题

OK

蒋博文 发表于 2020-3-29 09:59:04

def fun360(A, B):
      m = len(A)
      n = len(B)
      if m != n:
            return False;
      a=
      b=
      for i in range(m):
            a) - ord('a')] += 1
            b) - ord('a')] += 1
      flag = 0
      for i in range(26):
            if a != b:
                return False
            if a > 1:
                flag = 1
      temp = []
      for i in range(m):
            if A!=B:
                temp.append(i)
      if 0 == len(temp):
            if 1 == flag:
                return True
            else:
                return False
      if 2 == len(temp):
            return True
      return False
页: 1 [2] 3 4
查看完整版本: Python:每日一题 360