LeetCode 859. 親密字串(C、C++、python)
阿新 • • 發佈:2018-12-19
給定兩個由小寫字母構成的字串 A
和 B
,只要我們可以通過交換 A
中的兩個字母得到與 B
相等的結果,就返回 true
;否則返回 false
。
示例 1:
輸入: A = "ab", B = "ba" 輸出: true
示例 2:
輸入: A = "ab", B = "ab" 輸出: false
示例 3:
輸入: A = "aa", B = "aa" 輸出: true
示例 4:
輸入: A = "aaaaaaabc", B = "aaaaaaacb" 輸出: true
示例 5:
輸入: A = "", B = "aa" 輸出: false
提示:
0 <= A.length <= 20000
0 <= B.length <= 20000
A
和 B
僅由小寫字母構成。
C
bool buddyStrings(char* A, char* B) { int m=strlen(A); int n=strlen(B); if(m!=n) { return false; } int a[26]={0}; int b[26]={0}; for(int i=0;i<m;i++) { a[A[i]-'a']++; b[B[i]-'a']++; } for(int i=0;i<26;i++) { if(a[i]!=b[i]) { return false; } } int flag=0; for(int i=0;i<26;i++) { if(a[i]>1) { flag=1; break; } } int* res=(int*)malloc(sizeof(int)*m); int k=0; for(int i=0;i<m;i++) { if(A[i]!=B[i]) { res[k++]=i; } } if(k==0) { if(flag) { return true; } else { return false; } } if(k==2) { return true; } return false; }
C++
class Solution { public: bool buddyStrings(string A, string B) { int m=A.length(); int n=B.length(); if(m!=n) { return false; } int a[26]={0}; int b[26]={0}; for(int i=0;i<m;i++) { a[A[i]-'a']++; b[B[i]-'a']++; } for(int i=0;i<26;i++) { if(a[i]!=b[i]) { return false; } } if(A==B) { for(int i=0;i<26;i++) { if(a[i]>1) { return true; } } return false; } else { vector<int> temp; for(int i=0;i<m;i++) { if(A[i]!=B[i]) { temp.push_back(i); } } if(temp.size()!=2) { return false; } return true; } } };
python
class Solution:
def buddyStrings(self, A, B):
"""
:type A: str
:type B: str
:rtype: bool
"""
m=len(A)
n=len(B)
if m!=n:
return False;
a=[0 for i in range(26)]
b=[0 for i in range(26)]
for i in range(m):
a[ord(A[i])-ord('a')]+=1
b[ord(B[i])-ord('a')]+=1
flag=0
for i in range(26):
if a[i]!=b[i]:
return False
if a[i]>1:
flag=1
temp=[]
for i in range(m):
if A[i]!=B[i]:
temp.append(i)
if 0==len(temp):
if 1==flag:
return True
else:
return False
if 2==len(temp):
return True
return False