• 【数据结构】算法 Buddy Strings 亲密字符串


    Buddy Strings 亲密字符串

    Given two strings a and b, return true if you can swap two letters in a so the result is equal to b, otherwise, return false.

    Swapping letters is defined as taking two indices i and j (0-indexed) such that i != j and swapping the characters at a[i] and b[j]. For example, swapping at indices 0 and 2 in "abcd" results in "cbad".

    示例 1:

    输入: A = "ab", B = "ba"
    输出: true
    解释: 你可以交换 A[0] = 'a' 和 A[1] = 'b' 生成 "ba",此时 A 和 B 相等。
    示例 2:

    输入: A = "ab", B = "ab"
    输出: false
    解释: 你只能交换 A[0] = 'a' 和 A[1] = 'b' 生成 "ba",此时 A 和 B 不相等。
    示例 3:

    输入: A = "aa", B = "aa"
    输出: true
    解释: 你可以交换 A[0] = 'a' 和 A[1] = 'a' 生成 "aa",此时 A 和 B 相等。
    示例 4:

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

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

    思路

    亲密字符串的场景:

    • 字符串完全相同,并且其中有重复的字符
    • 字符串中有2个字符,交换位置后整个字符串相等。
    public boolean hasRepeat(String a){
            int[] cnt = new int[26];
            char[] ac = a.toCharArray();
            for(int i = 0; i<ac.length;i++){
                cnt[ac[i]-'a'] +=1;
                if(cnt[ac[i]-'a']==2){
                    return true;
                }
            }
            return false;
        }
    
        public boolean buddyStrings(String a, String b) {
            if(a.length()!=b.length()){
                return false;//长度不一样
            }
            if(a.equals(b)){
                return hasRepeat(a);
            }
            int i = 0;
            int j;
            char[] a1 = a.toCharArray();
            char[] b1 = b.toCharArray();
            
            while(a1[i]==b1[i]){
                ++i;
            };//得到第一个不相同的char
            j=i+1;
            while(j<a.length()&&a1[j]==b1[j]){
                ++j;
            }//可能遍历结束,或者得到第二个相同char
            if(j==a.length()){
                return false;
            }
            if(a1[i]!=b1[j]||a1[j]!=b1[i]){
                return false;//交叉不相等
            }
            j+=1;
            while(j<a.length()){
                if(a1[j]!=b1[j]){
                    return false;
                }
                j+=1;
            }
            return true;
    
        }
    
  • 相关阅读:
    你的程序员是在努力工作还是在偷懒?
    React 入门实例教程[阮一峰的网络日志] (分享)
    给大家分享下坐标转换的代码的JS和Python两个版本的源码【转】
    一个不错的 在线字体 网站
    用Python作GIS之一:介入STARS
    UI“三重天”之selenium--封装(二)
    UI“三重天”之Selenium(一)
    “点点点”的误区
    (转)CentOS 7安装Zabbix 3.4
    Ui"三重天"之重温Uiaumator(1)
  • 原文地址:https://www.cnblogs.com/dreamtaker/p/14540699.html
Copyright © 2020-2023  润新知