LeetCode--242. Valid Anagram
来源:互联网 发布:淘宝账号回收 编辑:程序博客网 时间:2024/05/17 06:13
Problem:
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.Follow up:What if the inputs contain unicode characters? How would you adapt your solution to such case?
Analysis:
这个题目前想到三种方法,
第一:用hash,将s中的每个字符存入key,value存这个字符出现的次数。如果t中发现这个字符则value减1,如果t中的字符在hash中没有找到则返回false。
第二:用字符数组,将每个字符的个数存入相应的数组中。
第三:排序然后判断排序后的字符数组是否相等
Answer:
hash方法:
public class Solution { public boolean isAnagram(String s, String t) { //判断边界条件 if(s==null && t==null) return true; if(s==null || t==null) return false; //利用s和t的长度不等返回减少时间 int sLen=s.length(); int tLen=t.length(); if(sLen!=tLen) return false; HashMap<Character,Integer> map = new HashMap<Character,Integer>(); for(int i=0;i<sLen;i++){ if(map.containsKey(s.charAt(i))) map.put(s.charAt(i),map.get(s.charAt(i))+1); else map.put(s.charAt(i),1); } for(int i=0;i<tLen;i++){ if(map.containsKey(t.charAt(i))){ int temp = map.get(t.charAt(i)); if(temp>0) map.put(t.charAt(i),temp-1); else return false; } else return false; } return true; }}
字符数组方法:
public boolean isAnagram(String s, String t) { // we do the following assumptions: // - s and t do not contain any whitespaces which have to be removed // - s and t do not contain ascii characters char[] sMap = map(s); char[] tMap = map(t); return (Arrays.equals(sMap, tMap));}private char[] map(String s){ char[] map = new char[128]; for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); map[c] += 1; } return map;}
下面是用hash的另一种解法,同时便利s和t,如果t中的字符在map中有则减1,如果没有则赋值为-1:
for(int i=0; i<n; i++){ charset.put(s.charAt(i), charset.containsKey(s.charAt(i)) ? charset.get(s.charAt(i))+1 : 1); charset.put(t.charAt(i), charset.containsKey(t.charAt(i)) ? charset.get(t.charAt(i))-1 : -1); } for(int i: charset.values()){ if (i!=0) return false; } return true;
排序后判断两个字符数组是否相等:
public class Solution { public boolean isAnagram(String s, String t) { char[] sArr = s.toCharArray(); char[] tArr = t.toCharArray(); Arrays.sort(sArr); Arrays.sort(tArr); return String.valueOf(sArr).equals(String.valueOf(tArr)); } }
经验:
- for(int i: charset.values()),map的values()方法。
- 利用字符数组,常规的字符128个,总的256个。
- char[] S= s.toCharArray();字符串转字符数组方法。
- Arrays.sort(S);数组排序方法。
0 0
- [leetcode] 242.Valid Anagram
- leetcode 242. Valid Anagram
- [leetcode] 242. Valid Anagram
- leetCode 242. Valid Anagram
- Leetcode 242. Valid Anagram
- 242. Valid Anagram LeetCode
- LeetCode 242. Valid Anagram
- LeetCode 242. Valid Anagram
- [LeetCode]242. Valid Anagram
- 【LeetCode】242. Valid Anagram
- leetcode 242. Valid Anagram
- leetcode 242. Valid Anagram
- LeetCode--242. Valid Anagram
- LeetCode *** 242. Valid Anagram
- #leetcode#242. Valid Anagram
- leetcode 242. Valid Anagram
- LeetCode 242. Valid Anagram
- 242.[LeetCode]Valid Anagram
- 设计模式的预备知识:类图与设计原则
- Android WebView 实现JS相互调用 JsBridge
- 修改textview button 中图片的方法
- 蓝桥杯 基础练习 数列特征
- cordova build机制
- LeetCode--242. Valid Anagram
- 关于TextReader
- 第十九讲--实例崩溃恢复原理剖析
- 第二章--类型运算符表达式
- 关于坚持
- cocoapods 找不到头文件
- 蓝桥杯 基础练习 查找整数
- RTX 组织架构刷新不出来
- java开发 web项目部署