给定两个字符串 s1
和 s2
,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
示例 1:
输入: s1 = "abc", s2= "bca" 输出: true
示例 2:
输入: s1 = "abc", s2 = "bad"
输出: false
说明:
0 <= len(s1) <= 100
0 <= len(s2) <= 100
在这里我使用了最好理解的哈希表的方法进行解题,在时间复杂度O(n),但在空间复杂度上消耗相当大,因为建立了两个哈希表。
代码实现:
class Solution {
public boolean CheckPermutation(String s1, String s2) {
if(s1.length()!=s2.length()){
return false;
}
HashMap<Character,Integer> map1=new HashMap<Character,Integer>();
HashMap<Character,Integer> map2=new HashMap<Character,Integer>();
for(int i=0;i<s1.length();i++){
char ch1=s1.charAt(i);
char ch2=s2.charAt(i);
if( !map1.containsKey(ch1)){
map1.put(ch1,1);
}
Integer value1=map1.get(ch1)+1;
map1.put(ch1,value1);
if(!map2.containsKey(ch2)){
map2.put(ch2,1);
}
Integer value2=map2.get(ch2)+1;
map2.put(ch2,value2);
}
Set<Character> set=map1.keySet();
for(Character ch:set){
if(map1.get(ch)!=map2.get(ch)){
return false;
}
}
return true;
}
}