[Java] LeetCode 859. Buddy Strings

Description

Given two strings A and B of lowercase letters, return true if and only if we can swap two letters in A so that the result equals B.

Example 1:
Input: A = "ab", B = "ba"
Output: true

Example 2:
Input: A = "ab", B = "ab"
Output: false

Example 3:
Input: A = "", B = "aa"
Output: false

问 :String A 是否能通过交换2个字符的位置使 String A 的内容和 String B 相同。

Solution

  1. 分情况讨论:A和B长度不等、A和B内容相等、A和B内容不等
  2. 若A、B长度不同,返回 false;
  3. 若A、B内容相同,则统计A中是否有重复字符,若有,则可交换相同字符,使A不变,返回 true;
  4. 若A、B内容不等,统计A和B字符不等的位置,判断个数是否为2,是否在对应交换的位置上字符相等。
class Solution {
   boolean buddyStrings(String A, String B) {
        if (A.length() != B.length())
            return false;
        if(A.equals(B)){
            Set<Character> set = new HashSet<>();
            for(char c : A.toCharArray())
                set.add(c);
            return set.size() < A.length();
        }
       List<Integer> dif = new ArrayList<>();
       for(int i = 0;i<A.length();i++)
           if(A.charAt(i) !=B.charAt(i)) dif.add(i);
       return dif.size() == 2 && A.charAt(dif.get(0) )==B.charAt(dif.get(1)) 
                     && A.charAt(dif.get(1)) ==B.charAt(dif.get(0));
    }
}

解法参考

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,906评论 0 38
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,818评论 0 10
  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 9,058评论 0 13
  • 会议纪要: 时间:2015-1-18 地点:SC大厦1009会议室 参会人员:等 会议主题: 关于如何进一步解决新...
    YKCA阅读 146评论 0 0
  • 1. 问题描述 PPT的幻灯片放映模式提供演讲者视图,辅助演讲备注。 在一个监视器(电脑屏幕)和多个监视器(外借显...
    马骋阅读 10,695评论 3 1