LeetCode - 242. Valid Anagram
来源:互联网 发布:中央人民大学网络教育 编辑:程序博客网 时间:2024/06/05 20:00
这道题与cc 150 1.3类似,可以有多种解法,最为方便的一种就是排序,然后检查两个String[]是否相等。时间复杂度为O(nlogn),空间复杂度为O(n),代码如下:
public boolean isAnagram(String s, String t) { if (s.length() != t.length()) { return false; } char[] str1 = s.toCharArray(); char[] str2 = t.toCharArray(); Arrays.sort(str1); Arrays.sort(str2); return Arrays.equals(str1, str2);}
根据题目中只含有小写字母的性质,我们也可以使用hash table的方法来解决这道题目,注意这里的hash table并不使用Java提供的,而是使用一个长度为26的数组(因为小写字母只有26个),同时也要注意这里的一个技巧,就是使用s.charAt(i) - 'a'来的到当前char所应该在的index,时间复杂度为O(n),空间复杂度为O(1),代码如下:
public class Solution { public boolean isAnagram(String s, String t) { if(s == null && t == null) return true; if(s == null || t == null) return false; if(s.length() != t.length()) return false; int[] alphabet = new int[26]; for(int i = 0; i < s.length(); i++) alphabet[s.charAt(i) - 'a']++; for(int i = 0; i < t.length(); i++) alphabet[t.charAt(i) - 'a']--; for(int i : alphabet) if(i != 0) return false; return true; }}
知识点:
1. 注意这道题目可以进行扩展为检查一个字符串是否是另一个字符串打乱后的结果,方法与这道题目比较相似,但是确认题目中的编码方式,如果是ASCII的话,那么第二种方法中申请的数组的长度应该为256
2. 记住一个小技巧,就是使用char - ‘a'来得到char相对于'a'的偏差,可以用这种方法方便地获取index
3. 这里首先对两个字符串的长度进行判断,是一种很好的预处理,可以节省很多的时间
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
- java初学之移位运算符<<, >>, >>>
- git撤销修改
- ffmpeg下载及安装
- Java与JSTL变量交互
- “深入理解”—选择排序算法
- LeetCode - 242. Valid Anagram
- iOS性能优化-TableView
- 剑指offer----数字在排序数组中出现的次数----java实现
- 最短前缀
- HTML标签以及各个标签属性大全
- C++11中的进行线程同步的方法
- 为什么要重写toString()方法
- 初涉MySQL操作(一)
- matlab移位运算