替换空格——字符串的批改
1.
遍历字符串,用新的字符串返回后果
工夫,空间复杂化均为O(n)
代码如下
func replaceSpace(s string) string { var res string for _,v:=range s{ if v==' '{ res=res+"%20" }else{ res=res+string(v) } } return res}
成果如下
2.
占用内存空间较小的办法
golang中字符串是无奈批改的,要对字符串进行操作应将其转化为字符数组
例如
var str string = "hello"strBytes := []byte(str)strBytes[0] = 'H'str = string(strBytes)fmt.Println(str)
题解
func replaceSpace(s string) string { b := []byte(s) length := len(b) spaceCount := 0 // 计算空格数量 for _, v := range b { if v == ' ' { spaceCount++ } } // 扩大原有切片 resizeCount := spaceCount * 2 tmp := make([]byte, resizeCount) b = append(b, tmp...) i := length - 1 j := len(b) - 1 for i >= 0 { if b[i] != ' ' { b[j] = b[i] i-- j-- } else { b[j] = '0' b[j-1] = '2' b[j-2] = '%' i-- j = j - 3 } } return string(b)}作者:carlsun-2链接:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/solution/jian-zhi-offer-05-ti-huan-kong-ge-shuang-cgk3/起源:力扣(LeetCode)著作权归作者所有。商业转载请分割作者取得受权,非商业转载请注明出处。
成果
可见内存失去了肯定的优化
3.
库函数
Replace返回字符串s的前n的正本 非重叠实例旧替换为新。 如果old为空,则匹配字符串的结尾 在每个UTF-8序列之后,产生多达k+1个替换 对于k-rune字符串。 如果n < 0,则不限度替换次数。
源码如下
func replaceSpace(s string) string{ return strings.Replace(s," ","%20",-1) }
字符串的排列——字符、字符串及其切片,字符串的遍历
————回溯/剪枝/动静布局
1.
回溯
func permutation(str string) []string { if len(str) == 0 { return nil } newStr := []string{} // 将字符串转换成字符串切片,不便排序 for _, value := range str { newStr = append(newStr, string(value)) } result := []string{} sort.Strings(newStr) dfsPermutation(newStr, 0, &result) return result}// 回溯函数实现// i示意本次函数须要搁置的元素地位func dfsPermutation(str []string, i int, result *[]string) { n := len(str) if i == n-1 { var tmp string //tmp := make([]string, n) //copy(tmp, str) //tmp = append(tmp, value) for _, value := range str { tmp += value } *result = append(*result, tmp) return } // nums[0:i]是曾经决定的局部,nums[i:]是待决定局部,同时待选元素也都在nums[i:] for k := i; k < n; k++ { // 跳过反复数字 if k != i && str[k] == str[i] { continue } str[k], str[i] = str[i], str[k] dfsPermutation(str, i+1, result) } // 还原状态 for k := n - 1; k > i; k-- { str[i], str[k] = str[k], str[i] }}
2.
动静布局
每次增加一个新的字符
代码
func permutation(s string) []string { length := len(s) mp, pre, result := make(map[string]int), make([]string, 0), []string{string(s[0])} for i := 1; i < length; i++ { for _, str := range result { ll := len(str) for j := 0; j <= ll; j++ { temp := str[:j] + string(s[i]) + str[j:] if _, OK := mp[temp]; !OK { mp[temp]++ pre = append(pre, temp) } } } result, pre = pre, make([]string, 0) } return result}