一:解题思路
方法一:先对2个字符串进行排序,然后逐一比较他们中的每一个元素,如果不等则返回false。Time:O(n*log(n)),Space:O(n)
方法二:申请一个大小为26的整形数组,s数组统计字母出现的次数,t数组抵消字母出现的次数。Time:O(n),Space:O(1)
二:完整代码示例 (C++版和Java版)
方法一C++:
//Time:O(n*log(n)),Space:O(1) class Solution { public: bool isAnagram(string s, string t) { if (s.size() == 0 && t.size() == 0) return true; if (s.size() == 0 || t.size() == 0 || s.size() != t.size()) return false; sort(s.begin(),s.end()); sort(t.begin(),t.end()); for (int i = 0; i < s.size(); i++) if (s[i] != t[i]) return false; return true; } };
方法一Java:
//Time:O(n*log(n)),Space:O(n) class Solution { public boolean isAnagram(String s, String t) { if(s.length()==0 && t.length()==0) return true; if(s==null || t==null || s.length()!=t.length()) return false; char[] sc=s.toCharArray(); char[] tc=t.toCharArray(); Arrays.sort(sc); Arrays.sort(tc); for(int i=0;i<sc.length;i++) if(sc[i]!=tc[i]) return false; return true; } }
方法二C++:
class Solution { public: bool isAnagram(string s, string t) { if (s.size() == 0 && t.size() == 0) return true; if (s.size() == 0 || t.size() == 0 || s.size() != t.size()) return false; vector<int> count(26,0); for (int i = 0; i < s.size(); i++) { count[s[i] - ‘a‘]++; count[t[i] - ‘a‘]--; } for (int i = 0; i < 26; i++) if (count[i] != 0) return false; return true; } };
方法二Java:
class Solution { public boolean isAnagram(String s, String t) { if(s.length()==0 && t.length()==0) return true; if(s==null || t==null || s.length()!=t.length()) return false; int[] count=new int[26]; for(int i=0;i<s.length();i++) { count[s.charAt(i)-‘a‘]++; count[t.charAt(i)-‘a‘]--; } for(int i=0;i<26;i++) if(count[i]!=0) return false; return true; } }
原文:https://www.cnblogs.com/repinkply/p/12633928.html