-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy path880_DecodedStringAtIndex.swift
50 lines (44 loc) · 1.22 KB
/
880_DecodedStringAtIndex.swift
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//
// 880. 索引处的解码字符串
//
// 题目链接:https://leetcode-cn.com/problems/decoded-string-at-index/
// 标签:字符串、余数
// 要点:TBD
// 时间复杂度:O(n)
// 空间复杂度:O(1)
//
import Foundation
class Solution {
func decodeAtIndex(_ S: String, _ K: Int) -> String {
var size = 0
for char in S {
if char.isNumber {
guard let digit = Int(String(char)) else { fatalError() }
size *= digit
} else if char.isLetter {
size += 1
} else {
return ""
}
}
var magicK = K
for char in S.reversed() {
magicK %= size
if magicK == 0 && char.isLetter {
return String(char)
}
if char.isNumber {
guard let digit = Int(String(char)) else { fatalError() }
size /= digit
} else {
size -= 1
}
}
return ""
}
}
// Tests
let s = Solution()
assert(s.decodeAtIndex("leet2code3", 10) == "o")
assert(s.decodeAtIndex("ha22", 5) == "h")
assert(s.decodeAtIndex("a2345678999999999999999", 1) == "a")