解题思路:
这题主要是考察对题目的理解,跳脱出对s交换得到所有情况判断的思路。
分为两种情况:
- s==goal且存在某个i!=j使得s[i]==s[j]
- 存在某个i!=j使得s[i]==goal[j]且s[j]==goal[i],并且s与goal的其他字符都相等(前提s[i]!=s[j],区别于第一种情况)
以下为C++代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| class Solution { public: bool buddyStrings(string s, string goal) {
if(s==goal){ int count[26]={0}; int len=s.size(); for(int i=0;i<len;i++){ count[s[i]-'a']++; if(count[s[i]-'a']>1){ return true; } } }else if(s.size()==goal.size()){ int first=-1; int second=-1; int len=s.size(); for(int i=0;i<len;i++){ if(s[i]!=goal[i]){ if(first==-1){ first=i; }else if(second==-1){ second=i; }else{ return false; } } } return (first!=-1&&second!=-1&&s[first]==goal[second]&&s[second]==goal[first]); } return false; } };
|