[LeetCode] [C++] LeetCode 344 Reverse String 反转字符串

题目要求

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

Example:
Given s = "hello", return "olleh".
LeetCode 344平台

问题描述

编写一个函数,将字符串s作为输入参数,输出s逆序的字符串。例如:给定输入字符串
s = "hello", 则返回输出字符串 "olleh"。

思路分析

从字符串首部、尾部分别向中心位置进行遍历,每次交换首尾的字符,直到首部下标
大于等于尾部下标

代码验证
class Solution {
public:
    string reverseString(string s) {
        string ret = s;
        
        for (int i = 0, j = ret.size() - 1; i < j; ++i, --j) {
            char s = ret[i];
            ret[i] = ret[j];
            ret[j] = s;
        }
        
        return ret;
    }
};

上述代码中通过定义了一个临时变量s用作交换ret[i]和ret[j]的值,这里又可以引出另一个有意思的
问题:能够不引人临时变量完成两个char或者int的交换? 显然是可以的,通过双目运算符 + 或者 ^
都可以实现不引人临时变量完成交换。

operationresult
a = a ^ ba = a ^ b
b = a ^ bb = (a ^ b) ^ b = a ^ (b ^ b) = a
a = a ^ ba = (a ^ b) ^ a = a ^ b ^ a = b

===========================================

operationresult
a = a + ba = a + b
b = a - bb = (a + b) - b = a
a = a - ba = (a + b) - a = b

因此,如果不引入临时变量实现的交换函数如下:

void swap(char& a, char& b) {
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
}
总结注意

需要反转一个字符串时,采用首尾置换法,将str[0] 和 str[size-1] 进行依次交换,这样效率高

原创声明

作者:hgli_00
链接:http://www.cnblogs.com/lihuagang/p/6740414.html
来源:博客园
著作权归作者所有,转载请联系作者获得授权。

转载于:https://www.cnblogs.com/lihuagang/p/leetcode_344.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值