博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] NO.383 Ransom Note
阅读量:6968 次
发布时间:2019-06-27

本文共 2059 字,大约阅读时间需要 6 分钟。

[题目] 

Given
 an 
arbitrary
 ransom
 note
 string 
and 
another 
string 
containing 
letters from
 all 
the 
magazines,
 write 
a 
function 
that 
will 
return 
true 
if 
the 
ransom 
 note 
can 
be 
constructed 
from 
the 
magazines ; 
otherwise, 
it 
will 
return 
false. 



Each 
letter
 in
 the
 magazine 
string 
can
 only 
be
 used 
once
 in
 your 
ransom
 note.

You may assume that both strings contain only lowercase letters.

canConstruct("a", "b") -> falsecanConstruct("aa", "ab") -> falsecanConstruct("aa", "aab") -> true

[题目解析] 首先明确题意,两个字符串,第一个字符串中的字母都是从第二个字符串中取得的。可以使用hashmap,将第一个字符串读取入hashmap,key是字符,value是对应该字符的个数。

然后遍历第二个字符串,对hashmap进行操作,依次对hashmap中含有的字符个数进行--,如果个数<0,则说明map中(即第一个字符中)含有的字符,在第二个字符串中没有覆盖到。代码如下。

public  boolean canConstruct(String ransomNote, String magazine)  {        Map charmap = new HashMap
(); for(int index = 0; index < magazine.length(); index++){ char tmp = magazine.charAt(index); if(charmap.containsKey(tmp)){ int count = (int) charmap.get(tmp); count++; charmap.put(tmp, count); }else{ charmap.put(tmp, 1); } } for(int index = 0; index < ransomNote.length(); index++){ char tmp = ransomNote.charAt(index); if(charmap.containsKey(tmp)){ int count = (int) charmap.get(tmp); count--; if(count < 0) return false; charmap.put(tmp, count); }else{ return false; } } return true;}

        考虑到字符串中只有小写字母,我们可以优化下代码,整体思路不变。代码如下。

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;  }

 

转载于:https://www.cnblogs.com/zzchit/p/5770355.html

你可能感兴趣的文章
ijkplayer如何使用FFmpeg 4.0内核?
查看>>
HBase2.0中的Benchmark工具 — PerformanceEvaluation
查看>>
基于 Docker 打造前端持续集成开发环境
查看>>
[case1]记一次spring schedule异常
查看>>
五分钟了解微服务
查看>>
Android从零开始(第四篇)网络框架MVP+Retrofit+Rxjava
查看>>
Android逆向从未如此简单
查看>>
从Android Studio 开始的ARCore之旅
查看>>
Android轮播图控件CustomBanner的使用讲解
查看>>
让你在服务器上顺风顺水——linux常用命令
查看>>
[iOS] [OC] NSNotificationCenter 进阶及自定义(附源代码)
查看>>
Python logging 库的『完整教程』
查看>>
springboot -- 2.0版本自定义ReidsCacheManager的改变
查看>>
应用层,了解一下
查看>>
Failed to execute aapt
查看>>
创建个人cocopods集合(仅供参考)
查看>>
OAuth2.0认证授权workflow探究
查看>>
《Android Security Internals》第二章权限翻译
查看>>
笔者介绍
查看>>
spring-cloud Sleuth
查看>>