在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ Given a string Since the result may be large, return the answer modulo Example 1: Input: 7
Explanation: The 7 distinct subsequences are "a", "b", "c", "ab", "ac", "bc", and "abc".
Example 2: Input: 6
Explanation: The 6 distinct subsequences are "a", "b", "ab", "ba", "aa" and "aba".
Example 3: Input: 3
Explanation: The 3 distinct subsequences are "a", "aa" and "aaa".
Note:
给定一个字符串 因为结果可能很大,所以返回答案模 示例 1: 输入:"abc" 输出:7 解释:7 个不同的子序列分别是 "a", "b", "c", "ab", "ac", "bc", 以及 "abc"。 示例 2: 输入:"aba" 输出:6 解释:6 个不同的子序列分别是 "a", "b", "ab", "ba", "aa" 以及 "aba"。 示例 3: 输入:"aaa" 输出:3 解释:3 个不同的子序列分别是 "a", "aa" 以及 "aaa"。 提示:
28ms 1 class Solution { 2 func distinctSubseqII(_ S: String) -> Int { 3 return distinctSubsequence(S.toCharArray(), 1000000007) 4 } 5 6 func distinctSubsequence(_ a:[Character],_ mod:Int) -> Int 7 { 8 var n = a.count 9 var bucket:[Int] = [Int](repeating: -1,count: 26) 10 11 var cum:Int = 0 12 for i in 0..<n 13 { 14 var v:Int = cum 15 //'a'的ASCII码值:97 16 var ind:Int = a[i].ascii - 97 17 if bucket[ind] == -1 18 { 19 v += 1 20 } 21 else 22 { 23 v += mod - bucket[ind] 24 } 25 if v >= mod 26 { 27 v -= mod 28 } 29 bucket[ind] = cum 30 cum += v 31 if cum >= mod 32 { 33 cum -= mod 34 } 35 } 36 return cum 37 } 38 } 39 40 //String扩展方法 41 extension String { 42 func toCharArray() -> [Character] 43 { 44 var arr:[Character] = [Character]() 45 for char in self.characters 46 { 47 arr.append(char) 48 } 49 return arr 50 } 51 } 52 53 //Character扩展方法 54 extension Character 55 { 56 //转ASCII整数值(定义小写为整数值) 57 var ascii: Int { 58 get { 59 let s = String(self).unicodeScalars 60 return Int(s[s.startIndex].value) 61 } 62 } 63 }
|
请发表评论