算法笔记-赎金信

2024-04-18

# 赎金信

随笔 : 赎金信 Ransom Note 赎金信通常指的是绑架者用来向受害者传达要求的信件,通常是由字母、数字和标点符号组成的短文本,用来表达要求支付赎金或其他要求。

# 题目

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

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

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

示例 1:

1
2
输入:ransomNote = "a", magazine = "b"
输出:false

示例 2:

1
2
输入:ransomNote = "aa", magazine = "ab"
输出:false

示例 3:

1
2
输入:ransomNote = "aa", magazine = "aab"
输出:true

提示:

  • 1 <= ransomNote.length, magazine.length <= 105
  • ransomNotemagazine 由小写英文字母组成

这是一道简单题 做起来还是比较顺的

# 题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class Solution {
public bool CanConstruct(string ransomNote, string magazine) {
Dictionary<char,int> ransom2ShowDic = new(); //ransom中字符出现的次数
char[] ransomChars = ransomNote.ToCharArray();
foreach(char word in ransomChars){
if(!ransom2ShowDic.TryAdd(word,1)){
ransom2ShowDic[word]++;
}
}

//遍历magazine 如果出现相同字符就减 C#可以直接遍历字符串
foreach(char word in magazine){
if(ransom2ShowDic.ContainsKey(word)){
ransom2ShowDic[word]--;
}

}

// 检查所有字符的出现次数是否都小于等于0
foreach (int showTime in ransom2ShowDic.Values) {
if (showTime > 0) {
return false; // 只要有一个字符的出现次数大于0,就返回false
}
}

return true;
}
}