亲密字符串

2021-11-23  本文已影响0人  xialu

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/buddy-strings

题目描述:

给你两个字符串 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 相等。

示例 4:

输入:s = "aaaaaaabc", goal = "aaaaaaacb"
输出:true

思路:

字符串s和g不属于亲密字符串的情况:

代码实现:
class Solution {
    public boolean buddyStrings(String s, String g) {
        int s_len = s.length();
        int g_len = g.length();
        // 长度不相同返回false
        if (s_len != g_len) return false;
        char[] a = new char[26];
        char[] b = new char[26];
        int idx = 0;
        for (int i = 0; i < s_len; i++) {
            int q = s.charAt(i) - 'a';
            int p = g.charAt(i) - 'a';
            a[q]++;
            b[p]++;
            if (q != p) idx++;
        }
        boolean flag = false;
        for (int i = 0; i < 26; i++) {
            // 有单词数量不相同返回false
            if (a[i] != b[i]) return false;
            if (a[i] > 1) flag = true;
        }

        return idx == 2 || (idx == 0 && flag);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读