思路的話
分兩種情況:1.當(dāng)兩個字符串相同時,直接確定單個字符串如s上是否有相同的兩個字符,這是由于相同的時候單字符串內(nèi)兩個相同字符即可任意交換金刁。
2.當(dāng)兩個字符串不同時蠢正,若超過兩個不同字符,直接輸出false,尋找不同的兩個字符闲询,看是否兩字符交換一下相等袍祖。
java版本:
class Solution {
public boolean buddyStrings(String s, String goal) {
if(s.length()!=goal.length()){
return false;
}
if(s==goal){
System.out.println("???");
int[] arr=new int[26];
char[] s_char=s.toCharArray();
for(char value:s_char){
System.out.println(value-'a');
if(arr[value-'a']==1){
return true;
}
arr[value-'a']=1;
}
return false;
}
int location_i=-1,location_j=-1;
for(int i=0;i<s.length();i++){
if(s.charAt(i)!=goal.charAt(i)){
if(location_i==-1){
location_i=i;
}else if (location_j==-1){
location_j=i;
}else{
return false;
}
}
}
return location_j!=-1 && s.charAt(location_i)==goal.charAt(location_j) && s.charAt(location_j)==goal.charAt(location_i);
}
}
Go版本
import "fmt"
func buddyStrings(s string, goal string) bool {
if len(s)!=len(goal){
return false;
}
location_i,location_j:=-1,-1
if s == goal {
seen := [26]bool{}
// 存在重復(fù)的地方可以互相交換
for _, ch := range s {
if seen[ch-'a'] {
return true
}
seen[ch-'a'] = true
}
return false
}
for i:=0;i<len(s);i++{
if(s[i]!=goal[i] ){
if location_i==-1{
location_i=i;
}else if location_j==-1{
location_j=i;
}else{
return false;
}
}
}
return location_j!=-1 && s[location_i]==goal[location_j] && s[location_j]==goal[location_i];
}