根据题意进行模拟即可 : 使用 a 和 b 记录不同的位置下标,初始值为 -1,若「不同位置超过 $2$ 个」或「只有 $1$ 个」直接返回 false,若「不存在不同位置」或「不同位置字符相同」,则返回 true。
Java 代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
classSolution { publicbooleanareAlmostEqual(String s1, String s2) { intn= s1.length(), a = -1, b = -1; for (inti=0; i < n; i++) { if (s1.charAt(i) == s2.charAt(i)) continue; if (a == -1) a = i; elseif (b == -1) b = i; elsereturnfalse; } if (a == -1) returntrue; if (b == -1) returnfalse; return s1.charAt(a) == s2.charAt(b) && s1.charAt(b) == s2.charAt(a); } }
TypeScript 代码:
1 2 3 4 5 6 7 8 9 10 11 12
functionareAlmostEqual(s1: string, s2: string): boolean { let n = s1.length, a = -1, b = -1 for (let i = 0; i < n; i++) { if (s1[i] == s2[i]) continue if (a == -1) a = i elseif (b == -1) b = i elsereturnfalse } if (a == -1) returntrue if (b == -1) returnfalse return s1[a] == s2[b] && s1[b] == s2[a] }
Python 代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
classSolution: defareAlmostEqual(self, s1: str, s2: str) -> bool: n, a, b = len(s1), -1, -1 for i inrange(n): if s1[i] == s2[i]: continue if a == -1: a = i elif b == -1: b = i else: returnFalse if a == -1: returnTrue if b == -1: returnFalse return s1[a] == s2[b] and s1[b] == s2[a]