151.反转字符串中的单词

原题链接151.反转字符串中的单词

思路:

1.可以使用额外空间,先对字符串进行空格处理,去掉多余空字符、前导空字符、末尾空字符。使用双指针检测空格,然后将子字符串赋值进新空间内即可,但是这样用了多的额外空间

2.因为不确定相邻在子字符串之间有多少空格,以及字符串开头和结尾有多少空格,所以先对字符串进行去空格处理.去掉多余空字符、前导空字符、末尾空字符后,只需要将整个字符串反转,然后反转相应子字符串就可以,空间复杂度为O(1),代码如下

go 复制代码
by_s :=[]byte(s)
    fast :=0
//去空字符
    //去掉前导空字符
    for len(by_s) >0 && fast <len(by_s) &&by_s[fast]==' '{//by_s不为空且遍历没有到末尾且当前下标指向空字符
        fast++//记录有多少个前导空字符
    }
    by_s = by_s[fast:len(by_s)]//把前导空字符给去掉
    
    //去掉最后的空字符
    fast = len(by_s) - 1
    for len(by_s) > 0 && by_s[fast] ==' '{//因为要访问数组,所以是-1,到最后切片的时候再加上去就可以了
        fast--
    }
    by_s = by_s[:fast+1]
    //去掉中间空字符
    fast = 0
    slow := 0
    for fast < len(by_s){//遍历整个字符串检测到前一个字符为空字符,则覆盖,最后一个字符必不为空字符
        if by_s[fast] == ' ' && by_s[fast+1] ==' '{
            fast++
        }else{
            by_s[slow] = by_s[fast]
            slow++
            fast++
        }
    }
    by_s = by_s[:slow]
go 复制代码
//2.1反转整个字符串
    reverse(by_s)
    //return string(by_s)
//2.2反转空格之间的子字符串
    cns :=0
    for j,i:=0,0;i<len(by_s);i++{
        if by_s[i] == ' '{//如果是空字符,则子字符串输入反转
            reverse(by_s[j:i])
            j = i+1 //i此时是空格,i+1则代表空格后的字符,用于下一次反转,直接从j开始
            cns = j//记录j,用于反转最后一个子字符串
        }
    }
    reverse(by_s[cns:len(by_s)])//反转末尾的子字符串
    return string(by_s)
}

--反转函数

go 复制代码
func reverse(b []byte){
    left :=0
    right := len(b)-1
    for left < right{
        b[left],b[right] = b[right],b[left]
        left++
        right--
    }
}
相关推荐
007php0071 小时前
服务器上PHP环境安装与更新版本和扩展(安装PHP、Nginx、Redis、Swoole和OPcache)
运维·服务器·后端·nginx·golang·测试用例·php
艾莉丝努力练剑3 小时前
【LeetCode&数据结构】单链表的应用——反转链表问题、链表的中间节点问题详解
c语言·开发语言·数据结构·学习·算法·leetcode·链表
_殊途4 小时前
《Java HashMap底层原理全解析(源码+性能+面试)》
java·数据结构·算法
珊瑚里的鱼8 小时前
LeetCode 692题解 | 前K个高频单词
开发语言·c++·算法·leetcode·职场和发展·学习方法
秋说9 小时前
【PTA数据结构 | C语言版】顺序队列的3个操作
c语言·数据结构·算法
lifallen9 小时前
Kafka 时间轮深度解析:如何O(1)处理定时任务
java·数据结构·分布式·后端·算法·kafka
liupenglove9 小时前
自动驾驶数据仓库:时间片合并算法。
大数据·数据仓库·算法·elasticsearch·自动驾驶
python_tty10 小时前
排序算法(二):插入排序
算法·排序算法
然我11 小时前
面试官:如何判断元素是否出现过?我:三种哈希方法任你选
前端·javascript·算法
F_D_Z11 小时前
【EM算法】三硬币模型
算法·机器学习·概率论·em算法·极大似然估计