344.反转字符串
541.反转字符串2
反转字符串2
这道题本身没什么难度,只需要把上面的函数抽象成方法调用即可。需要注意的是如果是go语言, 因为string是只读,所以需要首先转换成数组才能进行操作。
func reverseStr(s string, k int) string {
len := len(s)
tmp := []byte(s)
for i := 0; i < len; i += 2 * k {
if len - i >= k {
ReverseN(tmp, k, i)
}else{
ReverseN(tmp, len - i, i)
}
}
return string(tmp)
}
func ReverseN(s []byte, n int, start int) {
for i := 0; i < n / 2; i++{
tmp := s[start + i]
s[start + i] = s[start + n - 1 - i]
s[start + n - 1 - i] = tmp
}
}
剑指5.替换空格
替换空格
计算空格数量后,倒着往前利用双指针法进行操作
151.翻转字符串里的单词
翻转字符串里的单词
比较骚气的方法就是先整体翻转,然后再把单词额外翻转回来。但是还是要清楚点多余的空格。
里面的清楚空格的子模块比较方便,所以记录一下。比如清楚前面的空格和单词中间多余的空格时,两个相邻的比较,如果相同且均为空格就判定一下。
func reverseWords(s string) string {
tmp := []byte(s)
start := 0
end := 0
//去除前面的空格
for tmp[start] == ' ' && start < len(tmp){
start++
}
//去除中间的空格
for ; start < len(tmp) ; start++{
if start - 1 > 0 && tmp[start - 1] == tmp[start] && tmp[start] == ' '{
continue
}
tmp[end] = tmp[start]
end++
}
//去除末尾的空格
if end - 1 > 0 && tmp[end - 1] == ' '{
tmp = tmp[:end - 1]
}else{
tmp = tmp[:end]
}
//翻转整个字符串
ReverseN(tmp, 0, len(tmp) - 1)
//将单词翻转回来
i := 0
for i < len(tmp){
j := i
for ; j < len(tmp) && tmp[j] != ' ';j++{
}
ReverseN(tmp, i, j-1)
i = j
i++
}
return string(tmp)
}
func ReverseN(b []byte, left, right int){
len := right - left + 1
for i := 0; i < len / 2; i++ {
tmp := b[left + i]
b[left + i] = b[right - i]
b[right - i] = tmp
}
}
剑指58.左旋转字符串
左旋转字符串
这个题目代码随想录的解法是先整体翻转,然后前len-n翻转,后n翻转
个人感觉还可以用取余的方式用快慢指针来遍历
文章介绍了在Go语言中如何实现字符串反转,包括整体反转、按指定长度反转以及反转字符串中的单词。同时,讨论了替换空格和左旋转字符串的问题,使用了数组操作和双指针技术来解决。
1850

被折叠的 条评论
为什么被折叠?



