No alive nodes found in your cluster LeetCode每日一题: 亲密字符串(No.859) | 码农网

LeetCode每日一题: 亲密字符串(No.859)

栏目: 编程工具 · 发布时间: 2周前

来源: juejin.im

本文转载自:https://juejin.im/post/5ce790b2f265da1bc64b9cd0,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有。

给定两个由小写字母构成的字符串 A 和 B 。
只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回 true ;否则返回 false 。
复制代码

示例:

输入: A = "ab", B = "ba"
输出: true

输入: A = "ab", B = "ab"
输出: false

输入: A = "aa", B = "aa"
输出: true

输入: A = "aaaaaaabc", B = "aaaaaaacb"
输出: true

输入: A = "", B = "aa"
输出: false
复制代码

思考:

这道题首先判断两个字符串长度是否相等,长度不相等不可能是亲密字符串。
长度相等时,再比较两个字符串是否相等。
两个字符串相等:则查找在A或者B中是否有相同字符出现,有则是亲密字符串,没有就不是亲密字符串。
两个字符串不相等:先遍历记录不相等的字符个数和位置。不相等的字符数不等于2就不是亲密字符串。
不相等的字符数等于2:A交换这两个字符,再与B比较,相等就是亲密字符串。
复制代码

实现:

class Solution {
    public boolean buddyStrings(String A, String B) {
        //比较长度
        if (A.length() != B.length()) {
            return false;
        }
        //字符串是否相等
        if (A.equals(B)) {
            //相等判断是否有重复字符
            for (int count = 0; count < A.length(); count++) {
                if (A.indexOf(A.charAt(count), count + 1) != -1) {
                    //有重复字符返回true
                    return true;
                }
            }
            //没有返回false
            return false;
        } else {//字符串不相等
            //记录不相等字符出现次数
            int time = 0;
            //记录不相等字符位置
            List<Integer> pos = new ArrayList<>();
            for (int count = 0; count < A.length(); count++) {
                if (A.charAt(count) != B.charAt(count)) {
                    time++;
                    pos.add(count);
                }
            }
            //次数不等于2 不是亲密字符串
            if (time !=2) {
                return false;
            } else {
                //等于2交换字符后再次比较
                return swap(A, pos.get(0), pos.get(1)).equals(B);
            }
        }
    }
    private String swap(String str, Integer pos1, Integer pos2) {
        char[] charArray = str.toCharArray();
        char temp = charArray[pos1];
        charArray[pos1] = charArray[pos2];
        charArray[pos2] = temp;
        return new String(charArray);
    }
}复制代码

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

精通Nginx

精通Nginx

[瑞士]艾维利 / 陶利军 / 人民邮电出版社 / 2015-2 / 49.00元

Nginx是一个高性能的轻量级Web服务器,本书从配置文件的角度出发,介绍了多种关于 Nginx配置文件的技巧。 本书以模块化风格写成,几乎每一章都是一个独立的模块,读者将能够自由地在各个模块间切换阅读。全书分两部分,第一部分用8章内容介绍了安装Nginx及第三方模块、配置指南、使用mail模块、Nginx作为反向代理、反向代理高级话题、Nginx Http服务器、Nginx的开发以及故障排......一起来看看 《精通Nginx》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器