13.Valid Anagram
来源:互联网 发布:key软件授权工具 编辑:程序博客网 时间:2024/06/05 16:15
Given two strings s and t, write a function to determine if t is an anagram of s.
For example,
s = "anagram", t = "nagaram", return true.
s = "rat", t = "car", return false.
Note:
You may assume the string contains only lowercase alphabets.
分析,这个题目可以理解为给定两个字符串,判断出现的字符是否一样,并且每个字符出现的次数相等,若是则返回true,否则返回false。
有两种做法,都可以先得到s和t的长度,若长度不一样,则肯定是返回false。
方法一:先设定Num[26]依次存字符a,b,..z出现的次数(但是这个需要基于字符全部为小写字母的前提),同时遍历s和t,s中的字符要Nums[]对应元素加1,t中出现的字符要求Nums[]对应元素减1.最后Num[]中若全部元素为0则返回true,否则返回false。
方法二:与方法一类似,但是好处是不需要假设所有字符为小写字符。分别把s和t中的字符统计之后以 Map<String, Integer>存放,最后判断两个map是否相同,若相同则返回true,否则返回false。
方法三:分别把两个字符串对应的字符数组进行排序,然后比较这两个字符数组是否相等。
/* * 先设定Num[26]依次存字符a,b,..z出现的次数(但是这个需要基于字符全部为小写字母的前提), * 同时遍历s和t,s中的字符要Nums[]对应元素加1,t中出现的字符要求Nums[]对应元素减1. * 最后Num[]中若全部元素为0则返回true,否则返回false */public boolean isAnagram(String s, String t) {int[] Num = new int[26];int slen = s.length();int tlen = t.length();if (slen != tlen) {return false;} else {char ch;for (int i = 0; i < slen; i++) {ch = s.charAt(i);Num[ch - 'a']++;ch = t.charAt(i);Num[ch - 'a']--;}for (int i = 0; i < 26; i++) {if (Num[i] != 0)return false;}return true;}}private Map<String, Integer> getMap(String s) {Map<String, Integer> maps = new HashMap<String, Integer>();int slen = s.length();String ch;int value;for (int i = 0; i < slen; i++) {ch = s.substring(i, i + 1);if (maps.containsKey(ch)) {value = maps.get(ch);value = value + 1;maps.remove(ch);} else {value = 1;}maps.put(ch, value);}return maps;}/* * 与方法一类似,但是好处是不需要假设所有字符为小写字符。 * 分别把s和t中的字符统计之后以 Map<String, Integer>存放, * 最后判断两个map是否相同,若相同则返回true,否则返回false */public boolean isAnagram2(String s, String t) {Map<String, Integer> maps = new HashMap<String, Integer>();Map<String, Integer> mapt = new HashMap<String, Integer>();int slen = s.length();int tlen = t.length();if (slen != tlen) {return false;} else {maps = getMap(s);mapt = getMap(t);if (maps.equals(mapt)) {return true;} else {return false;}}}/** * @date 20151016 * 首先分别对字符串进行排序,若排序后相等,则true,否则返回false * @param s * @param t * @return */public boolean isAnagram3(String s, String t) {char ss[] = s.toCharArray();char tt[]=t.toCharArray();Arrays.sort(ss);Arrays.sort(tt);return String.valueOf(ss).equals(String.valueOf(tt));}
0 0
- 13.Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- ArcGIS Web 地图制作指南
- volatile关键字
- JVM系列三:JVM参数设置、分析
- HTTP 错误 500.21 - Internal Server Error 解决方案
- Reveal UI调试利器,逆向app的实践教程:Reveal别人的 app(一)
- 13.Valid Anagram
- perl \s \s* \s+
- OWIN - Open Web Interface for .NET
- hysbz 2243(树链剖分+区间合并)
- 新东西012--Android软键盘弹出位置控制
- QT5入门之13 - 获取当前路径
- [Leetcode]Binary Search Tree
- vc2008编译libjpeg
- shell编程(四)引号