3030
3131<!-- 这里可写通用的实现逻辑 -->
3232
33+ 用一个哈希表作为字符计数器,` O(n) ` 时间内解决。
34+
3335<!-- tabs:start -->
3436
3537### ** Python3**
3941``` python
4042class Solution :
4143 def CheckPermutation (self , s1 : str , s2 : str ) -> bool :
42- return sorted (s1) == sorted (s2)
44+ n1, n2 = len (s1), len (s2)
45+ if n1 != n2:
46+ return False
47+ counter = collections.Counter()
48+ for i in range (n1):
49+ counter[s1[i]] += 1
50+ counter[s2[i]] -= 1
51+ for val in counter.values():
52+ if val != 0 :
53+ return False
54+ return True
4355```
4456
4557### ** Java**
@@ -48,15 +60,23 @@ class Solution:
4860
4961``` java
5062class Solution {
51- public boolean checkPermutation (String s1 , String s2 ) {
52- if (s1 == null || s2 == null || s1. length() != s2. length()) {
63+ public boolean CheckPermutation (String s1 , String s2 ) {
64+ int n1 = s1. length(), n2 = s2. length();
65+ if (n1 != n2) {
5366 return false ;
5467 }
55- char [] c1 = s1. toCharArray();
56- char [] c2 = s2. toCharArray();
57- Arrays . sort(c1);
58- Arrays . sort(c2);
59- return Arrays . equals(c1, c2);
68+ Map<Character , Integer > counter = new HashMap<> ();
69+ for (int i = 0 ; i < n1; ++ i) {
70+ char c1 = s1. charAt(i), c2 = s2. charAt(i);
71+ counter. put(c1, counter. getOrDefault(c1, 0 ) + 1 );
72+ counter. put(c2, counter. getOrDefault(c2, 0 ) - 1 );
73+ }
74+ for (int val : counter. values()) {
75+ if (val != 0 ) {
76+ return false ;
77+ }
78+ }
79+ return true ;
6080 }
6181}
6282```
0 commit comments