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

[LeetCode] 344 Reverse String & 541 Reverse String II

时间:2017-09-15 21:37:00      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:problem   ble   ever   ons   代码   地址   直接   return   put   

原题地址:

344 Reverse String:

https://leetcode.com/problems/reverse-string/description/

541 Reverse String II:

https://leetcode.com/problems/reverse-string-ii/description/

 

题目&解法:

1.Reverse String:

Write a function that takes a string as input and returns the string reversed.

Example:
Given s = "hello", return "olleh".

 

这个直接上代码就行了,关于字符串翻转,不管字符数目是奇数还是偶数,都是一样的方法(当然可以调用库函数):

class Solution {
public:
    string reverseString(string s) {
        int size = s.size();
        for (int i = 0; i <= (size - 1) / 2; i++) {
            int temp = s[i];
            s[i] = s[size - i - 1];
            s[size - i - 1] = temp;
        } 
        return s;
    }
};

 

2. Reverse String II

Given a string and an integer k, you need to reverse the first k characters for every 2k characters counting from the start of the string. If there are less than k characters left, reverse all of them. If there are less than 2k but greater than or equal to k characters, then reverse the first k characters and left the other as original.

 

Example:

Input: s = "abcdefg", k = 2
Output: "bacdfeg"

 

Restrictions:

  1. The string consists of lower English letters only.
  2. Length of the given string and k will in the range [1, 10000]

 

也是很简单的一道题目,我的做法是这样的:先对前面满足2k的部分进行前k位的翻转,剩余不足的进行讨论,确认有几位需要翻转:

class Solution {
public:
    string reverseStr(string s, int k) {
       int double_k = 2 * k;
        int m = s.size() / double_k;
        int n = s.size() % double_k;  //剩余部分
        for (int i = 0; i < m; i++) {
            for (int j = 0; j <= (k - 1) / 2; j++) {
                char temp = s[i * double_k + j];
                s[i * double_k + j] = s[double_k * i + k - j - 1];
                s[double_k * i + k - j - 1] = temp;
            }
        }
        if (n == 0) return s;
        int end = n >= k ? k : n;
        for (int j = 0; j <= (end - 1) / 2; j++) {
            char temp = s[m * double_k + j];
            s[m * double_k + j] = s[double_k * m + end - j - 1];
            s[double_k * m + end - j - 1] = temp;
        }
        return s;
    }
};

 

[LeetCode] 344 Reverse String & 541 Reverse String II

标签:problem   ble   ever   ons   代码   地址   直接   return   put   

原文地址:http://www.cnblogs.com/fengziwei/p/7528350.html

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