30
30
31
31
<!-- 这里可写通用的实现逻辑 -->
32
32
33
+ 用一个哈希表作为字符计数器,` O(n) ` 时间内解决。
34
+
33
35
<!-- tabs:start -->
34
36
35
37
### ** Python3**
39
41
``` python
40
42
class Solution :
41
43
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
43
55
```
44
56
45
57
### ** Java**
@@ -48,15 +60,23 @@ class Solution:
48
60
49
61
``` java
50
62
class 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) {
53
66
return false ;
54
67
}
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 ;
60
80
}
61
81
}
62
82
```
0 commit comments