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

LeetCode: Reverse Words in a String && Rotate Array

时间:2015-06-06 11:59:49      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:

Title:

Given an input string, reverse the string word by word.

For example,
Given s = "the sky is blue",
return "blue is sky the".

https://leetcode.com/problems/reverse-words-in-a-string/

思路:先将字符串全部逆转,在将每个单词逆转。具体实现,要注意空格,所以对字符串倒过来处理。

class Solution {
public:
    void reverseWords(string &s)
    {
        string rs;
        for (int i = s.length()-1; i >= 0; )
        {
            while (i >= 0 && s[i] ==  ) i--;
            if (i < 0) break;
            if (!rs.empty()) rs.push_back( );
            string t;
            while (i >= 0 && s[i] !=  ) t.push_back(s[i--]);
            reverse(t.begin(), t.end());
            rs.append(t);
        }
        s = rs;
    }
};

 

Rotate Array

Rotate an array of n elements to the right by k steps.

For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].

https://leetcode.com/problems/rotate-array/

思路:一样,先将整个字符串反转,在对每个部分反转。另外注意k可能大于size。

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        if ( k < 0)
            return ;
        int size = nums.size();
        k = (k-1) % size + 1;
        reverse(nums,0,size-1);
        reverse(nums,0,k-1);
        reverse(nums,k,size-1);
    }
    void reverse(vector<int>& nums,int start, int end){
        while (start < end){
            nums[start] ^= nums[end];
            nums[end] ^= nums[start];
            nums[start++] ^= nums[end--];
        }
    }
};

 

LeetCode: Reverse Words in a String && Rotate Array

标签:

原文地址:http://www.cnblogs.com/yxzfscg/p/4556235.html

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