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