每日一题 --- 942. 增减字符串匹配[力扣][Go]

简介: 每日一题 --- 942. 增减字符串匹配[力扣][Go]

题目:

由范围 [0,n] 内所有整数组成的 n + 1 个整数的排列序列可以表示为长度为 n 的字符串 s ,其中:

如果 perm[i] < perm[i + 1] ,那么 s[i] == ‘I’

如果 perm[i] > perm[i + 1] ,那么 s[i] == ‘D’

给定一个字符串 s ,重构排列 perm 并返回它。如果有多个有效排列perm,则返回其中 任何一个 。

示例 1:

输入:s = “IDID”

输出:[0,4,1,3,2]

示例 2:

输入:s = “III”

输出:[0,1,2,3]

示例 3:

输入:s = “DDI”

输出:[3,2,0,1]

提示:

1 <= s.length <= 105

s 只包含字符 “I” 或 “D”

解题代码:

func diStringMatch(s string) []int {
  var ans = make([]int, 0)
  h := len(s)
  l := 0
  // 确定第一位是最高还是最低
  for len(s) != 0 {
    u := s[0]
    long := 0
    if len(ans) == 0 {
      if u == uint8('I') {
        ans = append(ans, l)
        long = strings.Index(s, "D")
        if long == -1 {
          long = len(s)
        }
        for i := 1; i <= long; i++ {
          ans = append(ans, h-long+i)
        }
        h -= long
        l ++
      } else {
        ans = append(ans, h)
        long = strings.Index(s, "I")
        if long == -1 {
          long = len(s)
        }
        for i := 1; i <= long; i++ {
          ans = append(ans, l+long-i)
        }
        l += long
        h --
      }
    } else {
      if u == uint8('I') {
        long = strings.Index(s, "D")
        if long == -1 {
          long = len(s)
        }
        for i := 1; i <= long; i++ {
          ans = append(ans, h-long+i)
        }
        h -= long
      } else {
        long = strings.Index(s, "I")
        if long == -1 {
          long = len(s)
        }
        for i := 1; i <= long; i++ {
          ans = append(ans, l+long-i)
        }
        l += long
      }
    }
    //fmt.Printf("s=%s,ans=%v\n",s,ans)
    s = s[long:]
  }
  return ans
}

时间复杂度O(n*m),还行吧,在go组中执行用时击败100%,但是内存消耗过高。


相关文章
|
1月前
|
存储 Go 索引
go语言中遍历字符串
go语言中遍历字符串
46 5
|
24天前
|
Go
go语言for 遍历字符串
go语言for 遍历字符串
29 8
|
28天前
|
Go 索引
go语言遍历字符串
go语言遍历字符串
26 3
|
3月前
|
Go
Go字节数组与字符串相互转换
Go字节数组与字符串相互转换
42 3
|
3月前
|
存储 Go
go语言字符串变小写
go语言字符串变小写
|
4月前
|
Go 开发者
|
4月前
|
JSON Go 数据格式
Go实现json字符串与各类struct相互转换
文章通过Go语言示例代码详细演示了如何实现JSON字符串与各类struct之间的相互转换,包括结构体对象生成JSON字符串和JSON字符串映射到struct对象的过程。
38 0
|
6月前
|
Go
【golang】Go 判断字符串是否包含指定字符
【golang】Go 判断字符串是否包含指定字符
94 1
|
6月前
|
Go
go的字符串
go的字符串
|
7月前
|
Go