题目描述: 为了不在赎金信中暴露字迹,从杂志上搜索各个需要的字母,组成单词来表达意思。 给你一个赎金信 (ransomNote) 字符串和一个杂志(magazine)字符串,判断 ransomNote 能不能由 magazines 里面的字符构成。 如果可以构成,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。
链接:https://leetcode-cn.com/problems/ransom-note
思路:ransomNode 字符串必须比magazine字符串短,magazine中必须包含ransomNode全部字符
解法一:
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
HashMap<Character,Integer> map = new HashMap<>();
for(int i=0;i<magazine.length();i++)
{
if(map.containsKey(magazine.charAt(i)))
{
map.put(magazine.charAt(i),map.get(magazine.charAt(i))+1);
}
else{
map.put(magazine.charAt(i),1);
}
}
for(int i=0;i<ransomNote.length();i++)
{
if(map.containsKey(ransomNote.charAt(i)))
{
int temp = map.get(ransomNote.charAt(i));
temp--;
map.put(ransomNote.charAt(i),temp);
if(temp<0)
{
return false;
}
}
else{
return false;
}
}
return true;
}
}
解法二:
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
if (ransomNote.length() > magazine.length()) {
return false;
}
int[] cnt = new int[26];
for (char c : magazine.toCharArray()) {
cnt[c - 'a']++;
}
for (char c : ransomNote.toCharArray()) {
cnt[c - 'a']--;
if(cnt[c - 'a'] < 0) {
return false;
}
}
return true;
}
}
|