【力扣面试题】面试题 01.02. 判定是否互为字符重排
题目
给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
示例1:
输入: s1 = “abc”, s2 = “bca”
输出: true
示例2:
输入: s1 = “abc”, s2 = “bad”
输出: false
解题思路
1、方法一:使用一个HashMap
- 使用一个HashMap,key存的是字符,value存的是字符出现的次数。
- 对于Str1字符串,那么每出现一个字符,那么就+1。对于Str2,先判断map是否存在该字符,不存在的话直接返回false。如果存在该字符,那么对其value进行减1 操作。
- 最后遍历一下Map,看看是不是每个value都等于0;
public class Test {
public static void main(String[] args) {
String str1 = "";
String str2 = "aa";
boolean solution = solution(str1,str2);
System.out.println(solution);
}
public static boolean solution(String str1,String str2) {
HashMap<Character, Integer> map = new HashMap<>();
for (int i = 0; i < str1.length(); i++) {
//containsKey,用来判断map中是否有这个key
if (!map.containsKey(str1.charAt(i))){
map.put(str1.charAt(i),1);
}else{
map.put(str1.charAt(i),map.get(str1.charAt(i))+1);
}
}
for (int i = 0; i < str2.length(); i++) {
if (!map.containsKey(str2.charAt(i))){
return false;
}else{
map.put(str2.charAt(i),map.get(str2.charAt(i))-1);
}
}
//检查是不是每个value都为0
for (Map.Entry<Character, Integer> entry : map.entrySet()) {
if (entry.getValue()!=0){
return false;
}
}
return true;
}
}
2、方法二:先排序后比较每个字符
class Solution {
public boolean CheckPermutation(String s1, String s2) {
// 将字符串转换成字符数组
char[] s1Chars = s1.toCharArray();
char[] s2Chars = s2.toCharArray();
// 对字符数组进行排序
Arrays.sort(s1Chars);
Arrays.sort(s2Chars);
// 再将字符数组转换成字符串,比较是否相等
return new String(s1Chars).equals(new String(s2Chars));
}
}
java