[蓝蓝计算机考研算法]-day6字符串反转

65 阅读2分钟

题目描述

接受一个只包含小写字母的字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000) 题目来源

输入描述

输入一行,即一个只包含小写字母的字符串。

输出描述

输出该字符串反转后的字符串。

示例

输入:abcd
输出:dcba

思路

法1:双指针法 准备两个指针,从字符串首尾同时出发,每次交换二者指向的字符,直到二者相遇,交换,最终完成反转。(用到了交换函数swap(a,b))

法2:反转函数法 调用algorithm库中的反转函数reverse(),可以直接对字符串反转,然后输出。

具体实现

法1:双指针法

#include<iostream>
using namespace std;
int main(){
    string a;
    cin>>a;
    int left = 0; //定义双指针
    int right = a.length()-1;
    while(left<right){
        swap(a[left],a[right]); //反转
        left++;
        right--;
    }
    cout<<a;
}

法2:反转函数法

#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    string a;
    cin >> a;
    reverse(a.begin(),a.end()); //reverse函数,对字符串反转
    cout << a;
}

时间复杂度

法1:双指针法 时间复杂度为O(N),N为字符串长度

法2:反转函数法 时间复杂度为O(N),N为字符串长度

小结

  1. begin和end函数:
    • begin和end是容器的两个成员函数,所有标准库容器都可以使用迭代器,虽然string类型不属于容器类型,但string支持很多与容器类似的操作。

    • begin():返回指向容器第一个元素的迭代器。

    • end():返回指向容器最后一个元素下一个位置的迭代器。

  2. algorithm头文件是C++的标准算法库,主要应用在容器上,常用函数如下:
    • max(a,b):求两个数最大值。

    • min(a,b):求两数最小值。

    • abs(a):求一个数绝对值。

    • swap(x,y):交换函数,用来交换x和y值。

    • reverse(a,b):翻转函数,翻转x-y区间的数组、容器的值。(若想对容器中所有数进行翻转,则需要用到begin(),end()函数)。

    • sort(x,y):排序数组,对x-y区间的数组、容器进行排序,默认升序。(若想将数组降序排序,就需要写一个自定义函数,改变默认的排序功能,然后在调用sort函数时加上自定义函数,即sort(a,a+5,cmp) )。

    • count(x,y,4):在数组中查找4在x-y区间中出现的次数。

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 3 天,点击查看活动详情