给你两个字符串:ransomNote
和 magazine
,判断 ransomNote
能不能由 magazine
里面的字符构成。如果可以,返回 true
;否则返回 false
。magazine
中的每个字符只能在 ransomNote
中使用一次。
示例 1:
输入:ransomNote = "a", magazine = "b" 输出:false
一 哈希:
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;}
}
二:
public boolean canConstruct(String ransomNote, String magazine) {for (int i = 0; i < ransomNote.length(); i++) {String c = String.valueOf(ransomNote.charAt(i));if (magazine.contains(c)) {magazine = magazine.replaceFirst(c, "");} else {return false;}}return true;}
给定一种规律 pattern
和一个字符串 s
,判断 s
是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern
里的每个字母和字符串 s
中的每个非空单词之间存在着双向连接的对应规律。
示例1:
输入: pattern ="abba"
, s ="dog cat cat dog"
输出: true
public boolean wordPattern(String pattern, String s) {String[] split = s.split(" ");if(pattern.length()!=split.length)return false;Map<String,Character> map=new HashMap<>();Set<Character> set=new HashSet<>();for(int i=0;i<split.length;i++){if(map.containsKey(split[i])){if(map.get(split[i])!=pattern.charAt(i))return false;}else {if(set.contains(pattern.charAt(i)))return false;map.put(split[i], pattern.charAt(i));set.add(pattern.charAt(i));}}return true;}