0859. Buddy Strings

0859. Buddy Strings #

题目 #

  • 给定两个字符串 sgoal,若可以通过交换 s 中的两个字母后得到与 goal 相同的结果,则认为 sgoal 是亲密字符串。
  • 判断给定的两个字符串是否是亲密字符串。

思路 #

模拟 #

代码 #

模拟 #

class Solution {
    public boolean buddyStrings(String s, String goal) {
        if (s.length() != goal.length()) return false;
        Stack<Integer> stack = new Stack<>();
        for (int i = 0; i < s.length; i++) {
            if (s.charAt(i) != goal.charAt(i)) stack.push(i);
        }
        if (stack.size() == 0) {
            int[] count = new int[26];
            for (int i = 0; i < s.length(); i++) count[s.charAt(i)-'a'] += 1;
            for (int cnt: count) if (count > 1) return true;
            return false;
        }
        if (stack.size() != 2) return false;
        int pos_1 = stack.pop(), pos_2 = stack.pop();
        return s.charAt(pos_1) == goal.charAt(pos_2) && s.charAt(pos_2) == goal.charAt(pos_1);
    }
}