zoukankan      html  css  js  c++  java
  • 确定两个字符串是否接近

    确定两个字符串是否接近

    题目:
    如果可以使用以下操作从一个字符串得到另一个字符串,则认为两个字符串 接近 :

    操作 1:交换任意两个 现有 字符。
    例如,abcde -> aecdb
    操作 2:将一个 现有 字符的每次出现转换为另一个 现有 字符,并对另一个字符执行相同的操作。
    例如,aacabb -> bbcbaa(所有 a 转化为 b ,而所有的 b 转换为 a )
    你可以根据需要对任意一个字符串多次使用这两种操作。

    给你两个字符串,word1 和 word2 。如果 word1 和 word2 接近 ,就返回 true ;否则,返回 false 。

    示例 1:

    输入:word1 = "abc", word2 = "bca"
    输出:true
    解释:2 次操作从 word1 获得 word2 。
    执行操作 1:"abc" -> "acb"
    执行操作 1:"acb" -> "bca"
    示例 2:

    输入:word1 = "a", word2 = "aa"
    输出:false
    解释:不管执行多少次操作,都无法从 word1 得到 word2 ,反之亦然。
    示例 3:

    输入:word1 = "cabbba", word2 = "abbccc"
    输出:true
    解释:3 次操作从 word1 获得 word2 。
    执行操作 1:"cabbba" -> "caabbb"
    执行操作 2:"caabbb" -> "baaccc"
    执行操作 2:"baaccc" -> "abbccc"
    示例 4:

    输入:word1 = "cabbba", word2 = "aabbss"
    输出:false
    解释:不管执行多少次操作,都无法从 word1 得到 word2 ,反之亦然。

    解题思路:近似字符串需要满足以下条件:

    1. 长度相等
    2. 两个字符串中出现的字符相同
    3. 字符出现的个数相同(比如:"cabbba"有3b, 2a, 1c, "abbccc"有3c, 2b, 1a这是满足的,而“cabbba”和 “aabbss”是不满足的)
    class Solution {
        public boolean closeStrings(String word1, String word2) {
            int len1 = word1.length(), len2 = word2.length();
            if(len1 != len2)
                return false;
            
            char ch1[] = word1.toCharArray(), ch2[] = word2.toCharArray();
            int arr1[] = new int[26], arr2[] = new int[26];
            
            for(int i = 0; i < ch1.length; i++) {
                arr1[ch1[i] - 'a']++;
                arr2[ch2[i] - 'a']++;
            }
            
            //判断是否有可以交换的元素
            for(int i = 0; i < 26; i++) {
                //说明word1中有该字符word2中没有该字符
                //这种情况是不能变换的
                if(arr1[i] == 0 && arr2[i] > 0)
                    return false;
                if(arr2[i] == 0 && arr1[i] > 0)
                    return false;
            }
            
            Arrays.sort(arr2);
            Arrays.sort(arr1);
            
            for(int i = 0; i < 26; i++) {
                if(arr1[i] != arr2[i])
                    return false;
            }
            
            return true;
        }
    }
    
  • 相关阅读:
    Android环境配置问题
    Android diary 1
    Android diary 2
    myeclipse常见问题
    Mysql常用命令
    桉树系统公司市场高级副总裁David Butler:全球最广泛应用的企业内部云平台
    引用外部.css或.js文件的路径问题
    [基础知识]巧用项目生成事件属性自动打包
    TSQL经验总结
    [Silverlight]UI 开发规范
  • 原文地址:https://www.cnblogs.com/katoMegumi/p/13978770.html
Copyright © 2011-2022 走看看