每日一题 --- 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%,但是内存消耗过高。


相关文章
|
6月前
|
供应链 Go C语言
掌握Go语言:探索Go语言基础,字符串连接、关键字、空格、格式化字符串的重要性(7)
掌握Go语言:探索Go语言基础,字符串连接、关键字、空格、格式化字符串的重要性(7)
|
2月前
|
Go
Go字节数组与字符串相互转换
Go字节数组与字符串相互转换
36 3
|
2月前
|
存储 Go
go语言字符串变小写
go语言字符串变小写
|
3月前
|
Go 开发者
|
3月前
|
JSON Go 数据格式
Go实现json字符串与各类struct相互转换
文章通过Go语言示例代码详细演示了如何实现JSON字符串与各类struct之间的相互转换,包括结构体对象生成JSON字符串和JSON字符串映射到struct对象的过程。
26 0
|
5月前
|
Go
【golang】Go 判断字符串是否包含指定字符
【golang】Go 判断字符串是否包含指定字符
71 1
|
5月前
|
Go
go的字符串
go的字符串
|
6月前
|
Go
|
6月前
|
编解码 JavaScript 前端开发
【专栏】介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例
【4月更文挑战第29天】本文介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例。Base64编码将24位二进制数据转换为32位可打印字符,用“=”作填充。文中展示了各语言的编码解码代码,帮助开发者理解并应用于实际项目。
134 1
|
6月前
|
存储 Go 开发者
Golang深入浅出之-Go语言字符串操作:常见函数与面试示例
【4月更文挑战第20天】Go语言字符串是不可变的字节序列,采用UTF-8编码。本文介绍了字符串基础,如拼接(`+`或`fmt.Sprintf()`)、长度与索引、切片、查找与替换(`strings`包)以及转换与修剪。常见问题包括字符串不可变性、UTF-8编码处理、切片与容量以及查找与替换的边界条件。通过理解和实践这些函数及注意事项,能提升Go语言编程能力。
174 0