一、题目原型:
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。
二、示例剖析:
1 | 示例 1: |
三、解题思路:
1.第一想到的就是排下序,然后比对。
1 | func isAnagram(_ s: String, _ t: String) -> Bool { |
2.用ASCII码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28func isAnagram(_ s: String, _ t: String) -> Bool {
if s.count != t.count {
return false
}
var counter_s = Array.init(repeating: 0, count: 26)
var counter_t = Array.init(repeating: 0, count: 26)
var char_s = s.cString(using: String.Encoding.utf8)
var char_t = t.cString(using: String.Encoding.utf8)
// 因为.cString方法默认会在末尾加上空字符,ASCII码为0
// 所以需要将其删除
char_s?.removeLast()
char_t?.removeLast()
for char in char_s! {
let index = Int(char - 97)
counter_s[index] += 1
}
for char in char_t! {
let index = Int(char - 97)
counter_t[index] += 1
}
print(char_s,char_t)
return counter_s == counter_t
}
3.用ASCII码,.unicodeScalars方法,省去了删除最后的空字符的操作1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19func isAnagram(_ s: String, _ t: String) -> Bool {
if s.count != t.count {
return false
}
var counter_s = Array.init(repeating: 0, count: 26)
var char_s = s.unicodeScalars
for char in char_s {
let index = Int(char.value - 97)
counter_s[index] += 1
}
var counter_t = Array.init(repeating: 0, count: 26)
var char_t = t.unicodeScalars
for char in char_t {
let index = Int(char.value - 97)
counter_t[index] += 1
}
print(char_s,char_t)
return counter_s == counter_t
}
四、小结
1.耗时524
毫秒,超过16.13%
的提交记录,总提交数34
。
2.耗时148
毫秒,超过70.97%
的提交记录,总提交数34
。
3.耗时 44
毫秒,超过93.55%
的提交记录,总提交数34
。