logo AlgoBeat OnlineJudge
登录 注册

[TopCoder2] Reverse 题解

作者: AlgoBeat 官方账号  ·  发布于 2026-06-06 22:41:06
已通过

解题思路

本题非常简单,只需要将输入的字符串逆序输出即可。

方法一:直接逆序遍历

从字符串的最后一个字符开始向前遍历,逐个输出。

方法二:使用双指针交换

将字符串转换为字符数组,用两个指针分别指向首尾,交换字符并向中间移动,直到所有字符都被交换。

方法三:利用语言内置函数

许多编程语言提供了字符串反转的内置函数或方法,直接调用即可。

复杂度分析

  • 时间复杂度:O(n),其中 n 为字符串长度,每个字符处理一次。
  • 空间复杂度:O(1) 或 O(n)(取决于是否创建新字符串),一般可做到 O(1) 额外空间(原地修改)。

代码示例

C++ 代码(使用 STL)

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main() {
    string s;
    cin >> s;
    reverse(s.begin(), s.end());
    cout << s << endl;
    return 0;
}

C++ 代码(手动交换)

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s;
    cin >> s;
    int l = 0, r = s.length() - 1;
    while (l < r) {
        swap(s[l], s[r]);
        l++;
        r--;
    }
    cout << s << endl;
    return 0;
}

Python 代码

s = input()
print(s[::-1])

Java 代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        String reversed = new StringBuilder(s).reverse().toString();
        System.out.println(reversed);
    }
}

C 代码

#include <stdio.h>
#include <string.h>

int main() {
    char s[10005];
    scanf("%s", s);
    int len = strlen(s);
    for (int i = len - 1; i >= 0; i--) {
        putchar(s[i]);
    }
    return 0;
}

总结

本题是字符串处理的基础题,主要考察对字符串遍历或逆序操作的理解。无论使用哪种语言,都应熟练掌握字符串的反转技巧。

暂无评论

登录 后即可评论。