• 344. Reverse String


    The description of the problem

    Write a function that reverses a string. The input string is given as an array of characters s.
    You must do this by modifying the input array in-place with constant extra memory.
    An example:
    Input: s = [‘h’, ‘e’, ‘l’, ‘l’, ‘o’]
    Output: [‘o’, ‘l’, ‘l’, ‘e’, ‘h’]

    The intuition

    1. two indexes, one of which starts from the begins, the other of which starts from the ends.

    The solution code

    The best one

    #include 
    #include 
    using namespace std;
    class Solution {
    public:
        void reverseString(vector<char>& s) {
            int n = s.size();
            for (int i = 0, j = n - 1; i < n/2; i++, j--) {
                //swap(s[i], s[j]);
                // use xor operation to swap two elements
                s[i] ^= s[j];
                s[j] ^= s[i];
                s[i] ^= s[j];
            }
        }
    };
    int main() {
        Solution s;
        vector<char> s1 = {'h', 'e', 'l', 'l', 'o'};
        std::cout << "before reverse: ";
        for (auto c : s1) {
            std::cout << c << " ";
        }
        std::cout << std::endl;
        std::cout << "after  reverse: ";
        s.reverseString(s1);
        for (auto c : s1) {
            cout << c << " ";
        }
        cout << endl;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    The most intuitive one

    #include 
    #include 
    using namespace std;
    class Solution {
    public:
        void reverseString(vector<char>& s) {
            int n = s.size();
            vector<char> original(s);
            for (int i = 0; i < n; i++) {
                s[i] = original[n - i - 1];
            }
        }
    };
    int main() {
        Solution s;
        vector<char> s1 = {'h', 'e', 'l', 'l', 'o'};
        std::cout << "before reverse: ";
        for (auto c : s1) {
            std::cout << c << " ";
        }
        std::cout << std::endl;
        std::cout << "after  reverse: ";
        s.reverseString(s1);
        for (auto c : s1) {
            cout << c << " ";
        }
        cout << endl;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    The corresponding results

    before reverse: h e l l o 
    after  reverse: o l l e h 
    
    • 1
    • 2

    在这里插入图片描述

  • 相关阅读:
    提升个人认知的六个学习方法
    Collection接口常用方法总结。
    行情分析——加密货币市场大盘走势(11.7)
    中位数C++题解
    基于cross_silo做联邦学习编程的学习
    了解ActiveMQ、RabbitMQ、RocketMQ和Kafka的特点
    JS面向对象的几种设计模式
    react.js在visual code 下的hello World
    Python 获取class_name win32gui
    ARM 的 的 AMBA 总线
  • 原文地址:https://blog.csdn.net/weixin_38396940/article/details/126324863