力扣(LeetCode)亲密字符串 个人题解
给定两个由小写字母构成的字符串 A
和 B
,只要我们可以通过交换 A
中的两个字母得到与 B
相等的结果,就返回 true
;否则返回 false
。
示例 1:
输入: A = "ab", B = "ba" 输出: true
示例 2:
输入: A = "ab", B = "ab" 输出: false
示例 3:
输入: A = "aa", B = "aa" 输出: true
示例 4:
输入: A = "aaaaaaabc", B = "aaaaaaacb" 输出: true
示例 5:
输入: A = "", B = "aa" 输出: false
提示:
0 <= A.length <= 20000
0 <= B.length <= 20000
A
和B
仅由小写字母构成。
由题意可知,字符串有且只有在A和B的长度一样,并且错位的字符有且只有两个的时候,才是亲密字符串。
这里注意一个特殊情况,当一个字符串和另外一个字符串相等并且出现两个及以上的相同字符时,也需要认定为亲密字符串。这里第一次做题时没有清晰得认识到导致错误。
代码如下:
class Solution { public boolean buddyStrings(String A, String B) { boolean ans = false; if (A.length() != B.length()) return false; else if(A.equals(B)) { int[] count=new int[26]; for(int i=0;i<A.length();i++) { count[A.charAt(i)-'a']++; if(count[A.charAt(i)-'a']>1) return true; } } else { int difcount = 0; char diffchara = 0, diffcharb = 0; for (int i = 0; i < A.length(); i++) { if (A.charAt(i) != B.charAt(i)) { if (difcount == 0) { difcount++; diffchara = A.charAt(i); diffcharb = B.charAt(i); } else if (difcount == 1) { difcount++; if (diffchara == B.charAt(i) && diffcharb == A.charAt(i)) ans = true; else return false; } else { return false; } } } } return ans; } }
· 通过一个DEMO理解MCP(模型上下文协议)的生命周期
· MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题
· 记一次 .NET某固高运动卡测试 卡慢分析
· 微服务架构学习与思考:微服务拆分的原则
· 记一次 .NET某云HIS系统 CPU爆高分析
· AI浏览器自动化实战
· 通过一个DEMO理解MCP(模型上下文协议)的生命周期
· Chat to MySQL 最佳实践:MCP Server 服务调用
· 解锁.NET 9性能优化黑科技:从内存管理到Web性能的最全指南
· .NET周刊【3月第4期 2025-03-23】