[每日一题]-LintCode-勒索信

本文详细解析了如何解决勒索信问题,通过计数字符频率的方法判断是否能从杂志中剪切字符组成勒索信。文章提供了清晰的解题思路和实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来源

lintcode-勒索信

描述

给定一个任意的表示勒索信内容的字符串,和另一个字符串,表示能从杂志中获取到的所有字符,写一个方法判断能否通过剪下杂志中的字符来构造出这封勒索信,若可以,返回 true;否则返回 false。

杂志字符串中的每一个字符仅能在勒索信中使用一次。

你可以认为两个字符串都只包含小写字母。

样例

canConstruct(“a”, “b”) -> false
canConstruct(“aa”, “ab”) -> false
canConstruct(“aa”, “aab”) -> true

解题思路

这道题很简单,可以直接在第二个字符串里remove掉第一个字符串的所有字符即可.

但是,还是有一些机智的办法的,那就是老套路,小写字母,那就是只有26个咯,那就可以用数组下标来标识字母啦.然后计数逐一减去即可.

实现代码

/**
 * 勒索信
 */
public boolean canConstruct(String ransomNote, String magazine) {
  //初始化26个小写字母的数组
  int[] letters = new int[26];
  //在杂志中的字符计数
  for (char c : magazine.toCharArray()) {
    letters[c - 'a']++;
  }

  for (char c : ransomNote.toCharArray()) {
    letters[c - 'a']--;
    //如果某个字符数量小于0,则无法完成,false
    if (letters[c - 'a'] < 0) {
      return false;
    }
  }

  return true;
}

完.





ChangeLog
2018-12-18 完成

以上皆为个人所思所得,如有错误欢迎评论区指正。

欢迎转载,烦请署名并保留原文链接。

联系邮箱:huyanshi2580@gmail.com

更多学习笔记见个人博客------>呼延十

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值