剑指offer58翻转字符串

Posted shiganquan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer58翻转字符串相关的知识,希望对你有一定的参考价值。

题目一

输入英文句子,翻转句子中单词的顺序,但单词内字符顺序不变,标点当作普通字母处理。

如I am a student.  输出student a am i

思路

第一步翻转整个句子,.tneduts a ma I

第二次翻转每个单词,student. a am I

(代码用了reverse函数,也可以自己写)

若用库函数,需要注意,迭代器的区间表示是前闭后开,[first, last),也就是[first, last-1]

class Solution {
public:
    string ReverseSentence(string str) {
        reverse(str.begin(),str.end());
        int front=0;
        int back=0;
        int size = str.size();
        while(front < size)
        {
            while(front < size && str[front] ==  )
                ++front;
            back=front;
            while(back < size && str[back] !=  )
                ++back;
            reverse(str.begin() + front, str.begin() + back);
            front = back;
        }
        return str;
    }
};

下面是重写ReverseCore,思路一样

class Solution {
public:
    string ReverseSentence(string str) {
        int front=0;
        int back=0;
        int size = str.size();
        ReverseCore(str,0, size - 1);
        while(front < size)
        {
            while(front < size && str[front] ==  )
                ++front;
            back=front;
            while(back < size && str[back] !=  )
                ++back;
            ReverseCore(str, front, back - 1);
            front = back;
        }
        return str;
    }
    
    void ReverseCore(string& str, int begin, int end){
        if (begin > end)
            return;
        while (begin < end)
            swap(str[begin++], str[end--]);
    }
};

 

题目二

字符串的左旋操作是把字符串前面若干个字符转移到字符串尾部。如 abcdefg和数字2,输出 cdefgab

思路

借助上题思路,可以理解为 ab cdefg 然后按上述翻转字符串。

思想完全一样,先翻转整个,然后局部翻转。

class Solution {
public:
    string LeftRotateString(string str, int n) {
        int len = str.size();
        if (len == 0 || n > len)
            return "";
        reverse(str.begin(), str.end());
        reverse(str.begin(), str.begin() + len - n);
        reverse(str.begin() + len - n, str.end());
        return str;
    }
};

 

以上是关于剑指offer58翻转字符串的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer 58 -I 翻转单词顺序

代码随想录算法训练营第8天 | ● 344.反转字符串 ● 541. 反转字符串II ● 剑指Offer 05.替换空格 ● 151.翻转字符串里的单词 ● 剑指Offer58-II.左旋转字符串

剑指 Offer 58 - I. 翻转单词顺序

剑指 Offer 58 - I. 翻转单词顺序

剑指 Offer 58 - I. 翻转单词顺序

剑指 Offer 58 - I. 翻转单词顺序