美文网首页
亲密字符串

亲密字符串

作者: xialu | 来源:发表于2021-11-23 22:54 被阅读0次

来源:力扣(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不属于亲密字符串的情况:

  • s等长度不等于g的长度
  • s和g不想等的字符不等于两个
  • s和g字符的词频不同
    字符串s和g属于亲密字符串的情况:
  • s和g只有两个字符不同,并且交换s或者g中这两个字符位置,s == g.
  • s和g相同,并且s中有字符词频大于等于2
代码实现:
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);
    }
}

相关文章

  • 亲密字符串

    在leetCode上看到亲密字符串,接下来对这个词进一步的了解,从而写下了这篇笔记。 亲密字符串 给定两个由小写字...

  • 亲密字符串

    亲密字符串 给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的...

  • 亲密字符串

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

  • 859. 亲密字符串

    给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回...

  • 859. 亲密字符串

    给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回...

  • 859. 亲密字符串(Python)

    题目 难度:★★☆☆☆类型:字符串 给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两...

  • JS 笔试题 —— 亲密字符串

    题目: 给你两个字符串 s 和 goal ,只要我们可以通过交换 s 中的两个字母得到与 goal 相等的结果,就...

  • 2021-11-23 859 亲密字符串

    思路的话分两种情况:1.当两个字符串相同时,直接确定单个字符串如s上是否有相同的两个字符,这是由于相同的时候单字符...

  • 亲密关系(上下册)

    亲密关系上册:亲密关系的致命杀手 亲密关系下册:亲密关系的修复心法 亲密关系上册:亲密关系的致命杀手 亲密关系杀手...

  • Javascript知识点整合

    字符串 单行字符串: ‘字符串’或“字符串” 多行字符串: `多行字符串` 字符串操作: 字符串连接‘+’号 长度...

网友评论

      本文标题:亲密字符串

      本文链接:https://www.haomeiwen.com/subject/awpgtrtx.html