Golang面试题目-字符串替换和翻转操作

题目:设计一个方法,将字符串A中空格全部替换为【%20】。

要求:

  1. A有足够的空间存放新增字符。

  2. A的真实长度小于或等于1000。

  3. A由大小写的英文字母组成。

  4. 输入A,返回替换后的A。

解答:需操作两步,首先验证A是否仅包含英文字母,其次进行空格替换。

案例如下:

package main

import (
  "errors"
  "strings"
  "unicode"
)

func ReplaceString(str string) (string, error) {
  if len([]rune(str)) > 1000 {
    return str, errors.New("字符过长")
  }

  for _, val := range str {
    if string(val) != "" && !unicode.IsLetter(val) {
      return str, errors.New("包含非英文字母字符")
    }
  }

  return strings.Replace(str, " ", "%20", -1), nil
}

上述代码核心是用golang内置方法unicode.IsLetter判断字符是否是英文字母,之后使用strings.Replace来替换空格。

题目:设计⼀个算法,在不使用额外数据结构和储存空间情况下,翻转⼀个给定字符串(可使用单个过程变量)。

要求:

  1. 不可使用额外数据结构和储存空间。

  2. 输入⼀个string,返回翻转后的string。

  3. 保证字符串的长度小于或等于5000。

解答:原理是将⼀个字符串以中间字符为轴,前后翻转,即将string[len]赋值给string[0],将string[0]赋值给string[len]。

案例如下:

package main

import (
"errors"
)

func ReserveString(str string) (string, error) {
  reserveStr := []rune(str)
  length := len(reserveStr)
  if length > 5000 {
    return str, errors.New("字符过长")
  }

  for i := 0; i < length/2; i++ {
    reserveStr[i], reserveStr[length-i-1] = reserveStr[length-i-1], reserveStr[i]
  }

  return string(reserveStr), nil
}

上述代码核心就是以字符串长度的1/2为轴,前后赋值,就可以实现字符串反转。

扫码关注公众号获取更多内容。。。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luyaran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值