Q859 亲密字符串

给定两个由小写字母构成的字符串 AB ,只要我们可以通过交换 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

提示:

  1. 0 <= A.length <= 20000
  2. 0 <= B.length <= 20000
  3. AB 仅由小写字母构成。
public class Solution859 {
    public boolean buddyStrings(String A, String B) {
        if (A.length() != B.length() || A.length() == 0 && B.length() == 0)
            return false;

        char[] chs1 = A.toCharArray();
        char[] chs2 = B.toCharArray();
        boolean hasSame = false;
        int[] nums = new int[26];

        int n1 = -1, n2 = -1;
        for (int i = 0; i < chs1.length; i++) {
            if (chs1[i] != chs2[i]) {
                if (n1 == -1) {
                    n1 = i;
                } else if (n2 == - 1) {
                    n2 = i;
                } else {
                    return false;
                }
            }

            if (!hasSame) {
                nums[chs1[i] - 'a'] += 1;
                if (nums[chs1[i] - 'a'] > 1)
                    hasSame = true;
            }
        }

        return (n1 == -1 && hasSame) || ((n2 != -1) && (chs1[n1] == chs2[n2] && chs1[n2] == chs2[n1]));
    }

    public static void main(String[] args) {
        boolean b = new Solution859().buddyStrings("ab", "ba");
        System.out.println(b);
    }
}

猜你喜欢

转载自www.cnblogs.com/WeichengDDD/p/10711821.html