题目:设计一个方法,将字符串A中空格全部替换为【%20】。
要求:
-
A有足够的空间存放新增字符。
-
A的真实长度小于或等于1000。
-
A由大小写的英文字母组成。
-
输入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来替换空格。
题目:设计⼀个算法,在不使用额外数据结构和储存空间情况下,翻转⼀个给定字符串(可使用单个过程变量)。
要求:
-
不可使用额外数据结构和储存空间。
-
输入⼀个string,返回翻转后的string。
-
保证字符串的长度小于或等于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为轴,前后赋值,就可以实现字符串反转。
扫码关注公众号获取更多内容。。。