题解 | #翻转单词序列#

翻转单词序列

https://www.nowcoder.com/practice/3194a4f4cf814f63919d0790578d51f3

题解一:使用双指针。首先用左指针执行字符串的首元素,右指针执行字符串最后一个元素,然后将这两个元素调换位置,然后将两指针往里靠,继续替换,直到左指针大于等于右指针的位置。整体替换完后进行局部替换,先将两指针执行字符串首元素,然后遍历字符串,当遍历到空格或者\0字符串结束符,就进行局部替换,将右指针执行遍历到的元素的左边一个元素,然后开始循环替换。最后,更新左右指针,将左指针执行当前元素下一位,然后继续遍历。最后遍历完返回当前字符串。时间复杂度是O(n * n)。空间复杂度是O(1)。

class Solution {

  public:

    string ReverseSentence(string str) {

        if (str.empty())return string();

        int i = 0;

        int j = str.length() - 1;

        while (i < j) {

            char tmp = str[i];

            str[i] = str[j];

            str[j] = tmp;

            i += 1;

            j -= 1;

        }

        i = 0;

        j = 0;

        for ( j ; j <= str.length() ; j++) {

            int index = j;

            if (str[j] == ' ' || str[j] == '\0') {

                index -= 1;

                while (i < index) {

                    char tmp = str[i];

                    str[i] = str[index];

                    str[index] = tmp;

 

                    i ++;

                    index --;

                }

                i = j + 1;

            }

        }

        return str;

    }

};

题解二:使用辅助栈,栈中存的元素是字符串。首先,遍历字符串,将每个单词压入栈中,最后再将栈中的元素一一弹出,然后拼接,最后返回拼接后的字符串即使结果。如何识别每个单词并分割压入栈呢?首先用快慢指针,慢指针一开始执行字符串首元素,然后快指针负责遍历字符串,找到空格或者是字符串结束符,找到后使用substr进行分割,压入栈,最后更新慢指针位置,将慢指针指向快指针的下一位,当遇到的是空格,将空格也压入栈。最后遍历栈,将栈中元素一一弹出并拼接。时间复杂度是O(n),空间复杂度是O(n)。

lass Solution {

  public:

    string ReverseSentence(string str) {

        if(str.empty())return string();

        //借助辅助栈

        stack<string> stack1;

        int index = 0;

        int i = 0;

           

        for(i;i <= str.size();i++){

            if(str[i] == ' ' || str[i] == '\0'){

                stack1.push(str.substr(index,i - index));

                index = i + 1;

                if(str[i] == ' ')stack1.push(str.substr(i,1));

            }

        }

        str.clear();

        while(!stack1.empty()){

            str += stack1.top();stack1.pop();

        }

        return str;

    }

};

全部评论

相关推荐

双非本科小鼠:27兄弟,不应该还在享受校园吗哈哈😂
点赞 评论 收藏
分享
1.&nbsp;事件概述3月10日下午,华为在“心声社区”发布长达6500字通报,曝光72名正式员工及19名非雇员在非雇员招聘中存在徇私舞弊行为,多人出卖公司信息资产获利,引发热议。-&nbsp;“非雇员”一般指华为OD员工,与人力服务公司签劳动合同,以派遣方式到华为工作,薪资待遇与华为内部员工基本一致,可通过考核转正。2.&nbsp;相关传言与真相华为相关人士称暂无官方回应,很多传言细节不准确。&nbsp;华为成都研究所员工透露,此次通报主要涉及成都研究所的数据存储部门,整个数据存储业务约100余人,此次明文通报除名辞退或通报批评的有62名,“很多部门基本全开除”&nbsp;。网传任正非亲赴成都、封楼抓人等消息不实。早在2024年年中,就有...
七安有出处嘛:省流:任正非亲赴成都等消息不实,2024 年年中就有人举报了;涉及36名违规当事人,其中有13人被除名;10人有主动申报情节或情节较严重的,予以辞退处理;另有13人被劝退、个人职级降3等。另外还有26名相关管理责任人作为直接或间接管理者,被处以个人职级降6等,冻结个人涨薪、职级晋升、干部向上任命,冻结期6—12个月不等;若下属违规偶发,则仅通报批评。并没有释放100HC😂😂😂
投递华为等公司10个岗位 > 华为存储OD事变
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务