LeetCode 242. Valid Anagram

Given two strings s and , write a function to determine if t is an anagram of s.

anagram:相同字母异序词

两个字符串s和t,判断t是不是s的同字母异序词

example1:Input: s = "anagram", t = "nagaram"     Output: true
example2:Input: s = "rat", t = "car"     Output: false 

Note:You may assume the string contains only lowercase alphabets.

Follow up: What if the inputs contain unicode characters? How would you adapt your solution to such case?

字符串需要注意:大小写、是否包含unicode字符

方法一:

把s的存入字典中,再t的消去,最后检查字典中是否都为0

_(:з」∠)_这个方法显然是不太好。。。不过还是放上来吧囧

6.61/33.07

其他方法(其他po的):

方法二:

用数组存储,直接++或者--

38/69.44

方法三:

先对字符串进行排序,再比较

38/25.05

 

/* 方法一
*  Runtime: 28 ms, faster than 6.61% of Java online submissions for Valid Anagram.
*  Memory Usage: 39.1 MB, less than 33.07% of Java online submissions for Valid Anagram.
*/
class Solution {
    public static boolean isAnagram(String s, String t) {
	     if(s.length()!=t.length()) {return false;}   
		 Map<String, Integer> map = new HashMap<String, Integer>();
		 int temp = 0;
		 
		 // 将s字符串的存入map中
		 for(int i=0;i<s.length();i++) {
			 String c = s.charAt(i)+"";
			 if(map.containsKey(c)==false) {
				 map.put(c,1);
			 }else {
				 temp = (int) map.get(c)+1;
				 map.put(c,temp);
			 }
		 }
		 
		 // 将t字符串一个一个匹配map中的字符,如果遇到没有的 则直接返回false
		 for(int i=0;i<t.length();i++) {
			 String c = t.charAt(i)+"";
			 if(map.containsKey(c)==false) {
				 return false;
			 }else {
				 temp = (int)map.get(c)-1;
				 map.put(c,temp);
			 }
		 }
		 
		 // 检查map中是否每个key的value都为0
		 for(Integer v:map.values()) {
			 if(v!=0) {
				 return false;
			 }
		 }
	     return true; 
	    }
}
/* 方法二
*  Runtime: 6 ms, faster than 38.00% of Java online submissions for Valid Anagram.
*  Memory Usage: 38.3 MB, less than 69.44% of Java online submissions for Valid Anagram.
*/

public static boolean isAnagram(String s, String t) {
	     if(s.length()!=t.length()) {return false;}   
		 //初始化
	     int[] flag = new int[26];
	     for(int i=0;i<flag.length;i++) {
	    	 flag[i]=0;
	     }
	     
	     for(int i=0;i<s.length();i++) {
	    	 flag[s.charAt(i)-97]++;
	     }
	     
	     for(int i=0;i<t.length();i++) {
	    	 flag[t.charAt(i)-97]--;
	     }
	     
	     for(int i=0;i<flag.length;i++) {
	    	 if(flag[i]!=0) {
	    		 return false;
	    	 }
	     }
	     return true;
	    }
/*  方法三
*   Runtime: 6 ms, faster than 38.00% of Java online submissions for Valid Anagram.
*   Memory Usage: 39.4 MB, less than 25.05% of Java online submissions for Valid Anagram.
*/
class Solution {
    public static boolean isAnagram(String s, String t) {
	     if(s.length()!=t.length()) {return false;}  
	     char[] b = s.toCharArray();
		 Arrays.sort(b);
		 char[] c = t.toCharArray();
		 Arrays.sort(c);
		 return Arrays.equals(b,c);
	 }
}

借鉴方法地址:https://blog.csdn.net/fly_yr/article/details/49886391 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值