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 * 104
s
和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 };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理