网站空间 哪个速度快如何做网站建设
亲密字符串
859. 亲密字符串 - 力扣(LeetCode)
题目:
给你两个字符串 s
和 goal
,只要我们可以通过交换 s
中的两个字母得到与 goal
相等的结果,就返回 true
;否则返回 false
。
交换字母的定义是:取两个下标 i
和 j
(下标从 0
开始)且满足 i != j
,接着交换 s[i]
和 s[j]
处的字符。
- 例如,在
"abcd"
中交换下标0
和下标2
的元素可以生成"cbad"
。
示例 1:
输入:s = "ab", goal = "ba" 输出:true 解释:你可以交换 s[0] = 'a' 和 s[1] = 'b' 生成 "ba",此时 s 和 goal 相等。
示例 2:
输入:s = "ab", goal = "ab" 输出:false 解释:你只能交换 s[0] = 'a' 和 s[1] = 'b' 生成 "ba",此时 s 和 goal 不相等。
示例 3:
输入:s = "aa", goal = "aa" 输出:true 解释:你可以交换 s[0] = 'a' 和 s[1] = 'a' 生成 "aa",此时 s 和 goal 相等。
提示:
1 <= s.length, goal.length <= 2 * 104
s
和goal
由小写英文字母组成
自己的思路和代码:
思路:
可以分成两种情况:
第一种情况,是s与goal相等,当数组的长度等于1时,直接返回false。当数组的长度大于1时,查看s数组中有没有重复的元素,如果有返回true,没有返回false。
第二种情况,是s与goal不相等,同理,当数组的长度等于1时,直接返回false。当数组的长度大于1时,查看s数组和goal数组中是否正好有两个元素是不相等的,并且这两个元素是交叉相等的,返回true,否则返回false。
代码:
class Solution {
public:bool buddyStrings(string s, string goal) {if(s.size()!=goal.size()) return false;if(s == goal) {if(s.size()==1) {return false;} else {int temp[26] = {0};for(int i=0; i<s.size(); i++) {temp[s[i] - 'a']++;}for(int i=0; i<26; i++) {if(temp[i]>1) return true; }return false;}} else {if(s.size()==1) return false;int temp = 0;char s_temp[2], g_temp[2];for(int i=0; i<s.size(); i++) {if(s[i] != goal[i]) {if(temp<2) {s_temp[temp] = s[i];g_temp[temp] = goal[i];temp++; } else {return false;}}}if(temp==1) return false;if(s_temp[0]==g_temp[1] && s_temp[1]==g_temp[0]) {return true;} else {return false;}} //return true;}
};