码迷,mamicode.com
首页 > 其他好文 > 详细

【剑指offer】58、翻转字符串

时间:2018-07-22 18:41:31      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:test   nbsp   自己   offer   str   二次   剑指offer   ever   eve   

题目一

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

如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;
    }
};

 

【剑指offer】58、翻转字符串

标签:test   nbsp   自己   offer   str   二次   剑指offer   ever   eve   

原文地址:https://www.cnblogs.com/shiganquan/p/9350902.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!