题目:
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
示例:
输入: s = "anagram", t = "nagaram"
输出: true
思路:
(1)遍历其中一个字符串,统计各字符出现的次数,将次数存在一个数组中。
(2)遍历另一个字符串,对该数组次数进行减少。
(3)最终若数组中次数都为0,则true。
以题目示例为例,对s进行遍历,将ch-‘a’映射为record的索引,统计各字符出现次数。
ch | a | n | a | g | r | a | m |
-‘a’ | 0 | 13 | 0 | 6 | 17 | 0 | 12 |
统计结果为
0 | … | 6 | … | 13 | … | 17 | … | 26 | |
record | 3 | … | 1 | … | 1 | … | 1 | … | 0 |
然后遍历另一个字符串,如果出现record中相应字符就进行减操作,最后record所有记录都为0,即两个字符串互为字母异位词。
class Solution { public boolean isAnagram(String s, String t) { int[] record = new int[26];//a-z小写字母 for (int i = 0; i < s.length(); i++) { record[s.charAt(i) - 'a']++;//遍历第一个字符串,统计各字符出现频率 } for (int i = 0; i < t.length(); i++) { record[t.charAt(i) - 'a']--;//遍历第二个字符串,对各字符做减少操作 } for (int count: record) {//如果record记录都为0,代表各字符统计数相等 if (count != 0) { return false; } } return true; } }
哈希表:
当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。
但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。
哈希表数据结构选择:
(1)数组:题目要求的数据空间较小,能确定
(2)set: 题目要求的数据空间较大
(3)map: 题目要求的数据有key-value结构
原文地址:http://www.cnblogs.com/cjhtxdy/p/16919621.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性