🚩传送门:牛客题目

🍗鸡腿知识点:

异或运算符的特点是:数 **a** 两次异或同一个数 **b**a=a^b^b )仍然为原值 **a**

  1. **a=a^b**;   

b=b^a=b^a^b=a

  1. **a=a^b=a^b^a=b**;  

题目

写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)

简洁解题:

整理代码

  1. public class Test{
  2. public static void main(String[] args) {
  3. //字符串反转
  4. String string = "hello world";
  5. String reverse = new StringBuffer(string).reverse().toString();
  6. System.out.println("字符串反转前:"+string);
  7. System.out.println("字符串反转后:"+reverse);
  8. }
  9. }

解题合集:

解法 3 图示
🍗[NC]103. Java中的字符串反转方法整理 【异或运算用于交换】 - 图1

解法 4 原理

异或运算符的特点是:数 **a** 两次异或同一个数 **b**a=a^b^b )仍然为原值 **a**

  1. **a=a^b**;   

b=b^a=b^a^b=a

  1. **a=a^b=a^b^a=b**;  

整理代码

  1. import java.util.Stack;
  2. public class StringReverse {
  3. /**
  4. * 取得当前字符并和之前的字符append起来
  5. */
  6. public static String reverse1(String s) {
  7. int length = s.length();
  8. String reverse = "";
  9. for (int i=0; i<length; i++)
  10. reverse = s.charAt(i) + reverse;
  11. return reverse;
  12. }
  13. /**
  14. * 将字符从后往前的append起来
  15. */
  16. public static String reverse2(String s) {
  17. char[] array = s.toCharArray();
  18. String reverse = "";
  19. for (int i = array.length - 1; i >= 0; i--) {
  20. reverse += array[i];
  21. }
  22. return reverse;
  23. }
  24. /**
  25. * 二分交换,将后面的字符和前面对应的那个字符交换
  26. */
  27. public static String reverse3(String str) {
  28. // write code here
  29. int i=0;
  30. int j=str.length()-1;
  31. char[]res=str.toCharArray();
  32. while(i<j){
  33. char temp= res[i];
  34. res[i]=res[j];
  35. res[j]=temp;
  36. i++;j--;
  37. }
  38. return new String(res);
  39. }
  40. /**
  41. * 原理是使用异或交换字符串
  42. * a=a^b;
  43. * b=b^a;
  44. * a=b^a;
  45. */
  46. public static String reverse4(String s) {
  47. char[] array = s.toCharArray();
  48. int begin = 0;
  49. int end = s.length() - 1;
  50. while (begin < end) {
  51. array[begin] = (char) (array[begin] ^ array[end]);
  52. array[end] = (char) (array[end] ^ array[begin]);
  53. array[begin] = (char) (array[end] ^ array[begin]);
  54. begin++;
  55. end--;
  56. }
  57. return new String(array);
  58. }
  59. /**
  60. * 基于栈先进后出的原理
  61. */
  62. public static String reverse5(String s) {
  63. char[] array = s.toCharArray();
  64. Stack<Character> stack = new Stack<Character>();
  65. for (int i = 0; i < array.length; i++)
  66. stack.push(array[i]);
  67. String reverse = "";
  68. for (int i = 0; i < array.length; i++)
  69. reverse += stack.pop();
  70. return reverse;
  71. }
  72. }