比较两个字符串A和B,确定A中是否包含B中所有的字符。
2015-09-09 14:08
211 查看
如题
样例
给出 A =
=
给出 A =
=
注意
在 A 中出现的 B 字符串里的字符不需要连续或者有序。
目前思路是分别扫描两个字符串得到两个map<Character,Integer> 比较字母出现次数,若A的每个字母次数都>=B , 则成立。同理 判断是否互为变位词也可以使用这个思路,把次数判断为相等即可
样例
给出 A =
"ABCD"B
=
"ACD",返回
true
给出 A =
"ABCD"B
=
"AABC", 返回
false
注意
在 A 中出现的 B 字符串里的字符不需要连续或者有序。
目前思路是分别扫描两个字符串得到两个map<Character,Integer> 比较字母出现次数,若A的每个字母次数都>=B , 则成立。同理 判断是否互为变位词也可以使用这个思路,把次数判断为相等即可
public class Solution { /** * @param A : A string includes Upper Case letters * @param B : A string includes Upper Case letter * @return : if string A contains all of the characters in B return true else return false */ public boolean compareStrings(String A, String B) { // write your code here Map<Character,Integer> map1=new HashMap<>(); Map<Character,Integer> map2=new HashMap<>(); char[] word1=A.toCharArray(); char[] word2=B.toCharArray(); for(char c:word1){ if(map1.containsKey(c)){ int val=map1.get(c); map1.put(c,++val); } else{ map1.put(c,1); } } for(char c:word2){ if(map2.containsKey(c)){ int val=map2.get(c); map2.put(c,++val); } else{ map2.put(c,1); } } boolean has=true; for(Map.Entry<Character,Integer> entry:map2.entrySet()){ if(map1.containsKey(entry.getKey())){ if(map1.get(entry.getKey())>=(entry.getValue())){ //这一行第一次跑的时候就错在了这里,当时使用了equals,其实要考虑多的情况 continue; }else{ has=false; break; } }else{ has=false; break; } } return has; } }
相关文章推荐
- NoSQL架构实践——以NoSQL为辅
- hdu 2013 蟠桃记
- 队列的两种实现:数组和链表
- 一个由泛型和Auto Unbox引发的Crash
- Kafka设计解析(二):Kafka High Availability (上)
- LA 3942 Remember the Word(字典树/树上dp)
- Eclipse 中 Ant 无日志输出
- Integer to English Words 整数转换为英语表示
- 笔记-大话设计模式-25 中介者模式
- 任何时间,都可以开始
- 在CentOS 7系统上架设DNS服务
- HibernateTemplate和HibernateDaoSupport
- configure: error: --with-ssl=openssl was given, but SSL is not available.
- 计蒜客 第3题:判断质数
- 剖析Android中进程与线程调度之nice
- 关于《算法的乐趣》傅立叶变换一章的补充
- grep误用正则表达式
- APP 接口保护文档
- Oracle中的补充日志(supplemental log)
- Spring3.0 AOP 详解