翻转字符串

悠悠 2022-10-29 07:34 275阅读 0赞

翻转字符串

  • 字符串反转
    • 题目分析
  • 翻转字符串(2)
    • 题目分析

字符串反转

  • 来源:牛客网 链接:https://www.nowcoder.com/questionTerminal/e45e078701ab4e4cb49393ae30f1bb04[链接][Link 1]
  • 接受一个只包含小写字母的字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)
  • 输入描述:
  • 输入一行,为一个只包含小写字母的字符串。

  • 输出描述:
  • 输出该字符串反转后的字符串。

  • 示例1
  • 输入
  • abcd

  • 输出
  • dcba

题目分析

本题,主要的任务就是将字符串逆置过来,我们可以通过,将字符串转换为字符数组,然后将字符数组进行逆置,最后返回一个逆置完成的字符串:
源码如下:

  1. import java.util.Scanner;
  2. public class Main {
  3. private static String resver(String s) {
  4. char[] arr = s.toCharArray();
  5. for (int i = 0; i < arr.length / 2; i++) {
  6. char tmp = arr[i];
  7. arr[i] = arr[arr.length - 1 - i];
  8. arr[arr.length - 1 - i] = tmp;
  9. }
  10. return new String(arr);
  11. }
  12. public static void main(String[] args) {
  13. Scanner sc = new Scanner(System.in);
  14. String s = sc.nextLine();
  15. String ret = resver(s);
  16. System.out.println(ret);
  17. }
  18. }

在这里插入图片描述

翻转字符串(2)

  • 来源:牛客网 链接:https://www.nowcoder.com/questionTerminal/79c562297c0e4ff0952ef39ecde1bd6b
    链接
  • 给一个字符类型的数组chas和一个整数size,请把大小为size的左半区整体右移到右半区,右半区整体移动到左边。
  • 输入描述:
  • 输入两行,第一行一个整数,代表size,第二行一个字符串,代表chas

  • 输出描述:
  • 输出一行字符串,代表翻转后的字符串。

  • 示例1
  • 输入
  • 3
    abcdefg

  • 输出
  • defgabc

  • 备注:
  • 时间复杂度O(n)O(n),额外空间复杂度O(1)O(1)。

题目分析

当我们看到这个题目的时候,一般都会想,转换成字符数组,然后将它前面的拿出来,后边放前面,然后完成任务。
这样的做法,也可以,但是我们还可以用巧妙的方法求解:
例如:
在这里插入图片描述
这样的做法,只需要进行三次逆置即可,大大的降低了时间复杂度。

代码:

  1. import java.util.*;
  2. public class Main {
  3. //逆置字符串
  4. private static String reverse(String s, int begin, int end) {
  5. char[] arr = s.toCharArray();
  6. while (begin < end) {
  7. char tmp = arr[begin];
  8. arr[begin] = arr[end];
  9. arr[end] = tmp;
  10. begin++;
  11. end--;
  12. }
  13. return String.valueOf(arr);
  14. }
  15. private static String func(int n, String s) {
  16. //判断字符串是否为空
  17. if (s == null || n <= 0 || n >= s.length()) {
  18. return null;
  19. }
  20. s = reverse(s, 0, n - 1);
  21. s = reverse(s, n, s.length() - 1);
  22. s = reverse(s, 0, s.length() - 1);
  23. return s;
  24. }
  25. public static void main(String[] args) {
  26. Scanner sc = new Scanner(System.in);
  27. while (sc.hasNext()) {
  28. int n = sc.nextInt();
  29. String s = sc.next();
  30. String ret = func(n, s);
  31. System.out.println(ret);
  32. }
  33. }
  34. }

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,275人围观)

还没有评论,来说两句吧...

相关阅读

    相关 字符串翻转操作

    字符串翻转操作 题目: 小华有两个长度不超过1000的字符串s和t,现在他想将两个字符串翻转后拼接在一起(将s和t分别翻转后,按照s在前t在后的顺序拼接

    相关 翻转字符串

    翻转字符串 字符串反转 题目分析 翻转字符串(2) 题目分析 字符串反转 来源:牛客网 链接:https://www.n

    相关 翻转字符串

    题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的