首页 > 其他分享 >LeetCode.383 赎金信

LeetCode.383 赎金信

时间:2023-01-20 18:32:42浏览次数:38  
标签:ransomNote charAt int m2 magazine m1 LeetCode.383 赎金

1.题目

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。

如果可以,返回 true ;否则返回 false 。

magazine 中的每个字符只能在 ransomNote 中使用一次。


2.代码

class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
//定义一个数组用来计数
int[] arr = new int[26];
// int arr[26] = {0};
//判断长度问题
if(ransomNote.length()>magazine.length()){
return false;
}
//此时注意是先把magazine的数量加入数组中,然后再减去ransomNote
for(int i=0; i<magazine.length(); i++){
arr[magazine.charAt(i)-'a']++;
}
for(int j=0; j<ransomNote.length(); j++){
arr[ransomNote.charAt(j)-'a']--;
//只需要判断有没有小于0的,如果有,就说明ransomNote里的元素比magazine多(共有的元素)
if(arr[ransomNote.charAt(j)-'a']<0){
return false;
}
}
//最后返回true

return true;

/* 此方法是行不通的,因为最后两个集合是不能直接比较是否相等的,地址都不同
Map<Character,Integer> m1 = new HashMap<>();
Map<Character,Integer> m2 = new HashMap<>();
for(int i=0; i<ransomNote.length(); i++){
if(m1.containsKey(ransomNote.charAt(i))){
int count = m1.get(ransomNote.charAt(i));
m1.put(ransomNote.charAt(i),count+1);
}else{
m1.put(ransomNote.charAt(i),1);
}
}
for(int i=0; i<magazine.length(); i++){
if(m1.containsKey(magazine.charAt(i))){
if(m2.containsKey(magazine.charAt(i))){
int count = m2.get(magazine.charAt(i));
m2.put(magazine.charAt(i),count+1);
}else{
m2.put(magazine.charAt(i),1);
}
}
}
System.out.println(m1);
System.out.println(m2);
return m1==m2;*/

}
}


标签:ransomNote,charAt,int,m2,magazine,m1,LeetCode.383,赎金
From: https://blog.51cto.com/u_15806469/6020734

相关文章