题目:如果可以使用以下操作从一个字符串得到另一个字符串,则认为两个字符串 接近 :
- 操作 1:交换任意两个 现有 字符。
- 例如,abcde -> aecdb
- 操作 2:将一个 现有 字符的每次出现转换为另一个 现有 字符,并对另一个字符执行相同的操作。
- 例如,aacabb -> bbcbaa(所有 a 转化为 b ,而所有的 b 转换为 a )
你可以根据需要对任意一个字符串多次使用这两种操作。
给你两个字符串,word1 和 word2 。如果 word1 和 word2 接近 ,就返回 true ;否则,返回 false 。
解题思路:两个字符串接近的充分必要条件为:
1.两个字符串出现的字符集S1和S2相等,即S1=S2.
2.分别将两个字符串的字符出现次数数组f1 和 f2 进行排序后,两个数组从小到大——相等。
class Solution{ public boolean closeStrings(String word1,String word2){ int[] count1=new int[26],count2=new int[26]; for(char c:word1.toCharArray()){ count1[c-'a']++; } for(char c:word2.toCharArray()){ count2[c-'a']++; } for(int i=0;i<26;i++){ if(count1[i]>0 && count2[i]==0 || count1[i]==0 && count2[i]>0){ return false; } } Arrays.sort(count1); Arrays.sort(count2); return Arrays.equals(count1,count2); } }