您的位置:首页 > 其它

383. Ransom Note

2017-02-23 12:10 211 查看

Problem:

Solution:

开始时我误解了这道题的意思,我以为是关于字符串匹配的一道题,后来发现并非如此,题目的原意是“一个劫匪索要赎金,但为了防止身份被发现需要从杂志中剪下相应字母拼起来”,实质上就是判断ransomNote数组中的某个元素个数是否小于或等于magazine数组中对应元素的个数。我想到的一个方法就是创建辅助数组统计给定数组中每个元素的个数,然后相比较,若ransomNote数组中的某个元素个数大于magazine数组中对应元素的个数则返回false,否则返回true

Edition1:

class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
int store1[26] = {0};
int store2[26] = {0};
m = ransomNote.size();
int n = magazine.size();
for (int i = 0;i < m;i++)
{
int temp = ransomNote[i] - 'a';
store1[temp]++;
}
for (int i = 0;i < n;i++)
{
int temp = magazine[i] - 'a';
store2[temp]++;
}
for (int i = 0;i < 26;i++)
{
if (store1[i] > store2[i]) return false;
}
return true;
}
};
看到网上还有另外一种比较简单的算法,创建一个辅助数组即可,最后也不用再进行比较,直接判断数组对应位置的值是否小于0,如果小于0则说明magazine中的对应字符个数小于ransomNote中的,返回false。

Edition2:

public boolean canConstruct(String ransomNote, String magazine) {
int[] arr = new int[26];
for (int i = 0; i < magazine.length(); i++) {
arr[magazine.charAt(i) - 'a']++;
}
for (int i = 0; i < ransomNote.length(); i++) {
if(--arr[ransomNote.charAt(i)-'a'] < 0) {
return false;
}
}
return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: