859. 亲密字符串(模拟字符串)
859. 亲密字符串
给你两个字符串 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 * 104s和goal由小写英文字母组成
1 class Solution { 2 public: 3 bool buddyStrings(string s, string goal) { 4 // 两字符串长度不等,肯定非亲密字符 5 if (s.size() != goal.size()) { 6 return false; 7 } 8 vector<int> sChar(26); 9 vector<int> goalChar(26); 10 int diffNum = 0; // 两字符串不同字符个数 11 for (unsigned int i = 0; i < s.size(); i++) { 12 int a = s[i] - 'a'; 13 int b = goal[i] - 'a'; 14 sChar[a]++; 15 goalChar[b]++; 16 // 相同索引对应字符不一样时,不同字符个数++ 17 if (a != b) { 18 diffNum++; 19 } 20 } 21 bool isExistSameChar = false; 22 for (int i = 0; i < 26; i++) { 23 // 存在字符出现次数不一样时肯定非亲密字符 24 if (sChar[i] != goalChar[i]) { 25 return false; 26 } 27 // 存在重复字符 28 if (sChar[i] > 1) { 29 isExistSameChar = true; 30 } 31 } 32 return (diffNum == 2) || (diffNum == 0 && isExistSameChar); 33 } 34 };
浙公网安备 33010602011771号