微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

[Swift Weekly Contest 111]LeetCode942. 增减字符串匹配 | DI String Match

Given a string S that only contains "I" (increase) or "D" (decrease),let N = S.length.

Return any permutation A of [0,1,...,N] such that for all i = 0, ...,N-1:

  • If S[i] == "I",then A[i] < A[i+1]
  • If S[i] == "D",then A[i] > A[i+1]

 Example 1:

Input: "IDID"
Output: [0,4,3,2] 

Example 2:

Input: "III"
Output: [0,2,3] 

Example 3:

Input: "DDI"
Output: [3,1]

 Note:

  1. 1 <= S.length <= 10000
  2. S only contains characters "I" or "D".

给定只含 "I"(增大)或 "D"(减小)的字符串 S ,令 N = S.length

返回 [0,N] 的任意排列 A 使得对于所有 i = 0,N-1,都有:

  • 如果 S[i] == "I",那么 A[i] < A[i+1]
  • 如果 S[i] == "D",那么 A[i] > A[i+1]

示例 1:

输出:"IDID"
输出:[0,2]

示例 2:

输出:"III"
输出:[0,3]

示例 3:

输出:"DDI"
输出:[3,1]

提示

  1. 1 <= S.length <= 1000
  2. S 只包含字符 "I" 或 "D"

2096ms

 1 class Solution {
 2     func distringMatch(_ S: String) -> [Int] {
 3         var n:Int = S.count + 1
 4         var ret:[Int] = [Int](repeating: 0,count: n)
 5         var v:Int = n - 1
 6         var pre:Int = 0
 7         for i in 0..<(n - 1)
 8         {
 9             if S[i] == "D"
10             {
11                 for j in (pre...i).reversed()
12                 {
13                     ret[j] = v
14                     v -= 1
15                 }
16                 pre = i + 1
17             }
18         }
19         for j in (pre...(n - 1)).reversed()
20         {
21             ret[j] = v
22             v -= 1
23         }
24         return ret
25     }
26 }
27 
28 extension String {
29     //subscript函数可以检索数组中的值
30     //直接按照索引方式截取指定索引的字符
31     subscript (_ i: Int) -> Character {
32         //读取字符
33         get {return self[index(startIndex,offsetBy: i)]}
34     }
35 }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐