13.Valid Anagram

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

	}
	
	/**@author zk
	 * @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));
	}


你可能感兴趣的:(13.Valid Anagram)