leedcode-917 仅仅反转字母

The more you know the more you know you don't know

题目描述

给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。

示例 1:

输入:"ab-cd"
输出:"dc-ba"

示例 2:

输入:"a-bC-dEf-ghIj"
输出:"j-Ih-gfE-dCba"

示例 3:

输入:"Test1ng-Leet=code-Q!"
输出:"Qedo1ct-eeLg=ntse-T!"

提示:

S.length <= 100
33 <= S[i].ASCIIcode <= 122
S 中不包含 \ or "

解题思路

关键词:双指针、字符串、Go

执行用时 : 0 ms, 在所有 Go 提交中击败了100.00% 的用户

内存消耗 : 2.1 MB, 在所有 Go 提交中击败了100.00% 的用户

利用双指针,仅当rs[i] rs[j]都为字符时进行互换。一个for循环搞定

具体细节看代码

代码

func reverseOnlyLetters(S string) string {
  if len(S) == 0{
	return ""
  }
  rs := []rune(S)
  // 定义j为末尾指针
  j := len(rs) - 1
  for i := 0; i <= j; {
  // 若i不为字母,则i++不在继续执行后面的语句
	if ! unicode.IsLetter(rs[i]) {
	  i++
	  continue
	}
  // 若j为字母,则互换,且i++
    if unicode.IsLetter(rs[j]){
	  rs[j], rs[i] = rs[i], rs[j]
	  i++
    }
  // 若j不为字母i不变,j--
  j--
  }
  
  return string(rs)
}

总结

看到大家好多自己写了一个判断字母的函数,但Go语言中自带一个方法可以获取,有现成的轮子还是不要自己写。Don't repeat yourself !!

周拱一卒,砥砺前行,欢迎拍砖。一起刷题一起进步。

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章