🚩传送门:牛客题目
🍗鸡腿知识点:
异或运算符的特点是:数
**a**两次异或同一个数**b**( a=a^b^b )仍然为原值**a**
**a=a^b**;b=b^a=b^a^b=a;
**a=a^b=a^b^a=b**;
题目
写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)
简洁解题:
整理代码
public class Test{public static void main(String[] args) {//字符串反转String string = "hello world";String reverse = new StringBuffer(string).reverse().toString();System.out.println("字符串反转前:"+string);System.out.println("字符串反转后:"+reverse);}}
解题合集:
解法 3 图示![🍗[NC]103. Java中的字符串反转方法整理 【异或运算用于交换】 - 图1](/uploads/projects/mylearn@leetcode/db12209e9e1bc59e7cd5f18147504360.png)
解法 4 原理
异或运算符的特点是:数 **a** 两次异或同一个数 **b**( a=a^b^b )仍然为原值 **a**
**a=a^b**;b=b^a=b^a^b=a;
**a=a^b=a^b^a=b**;
整理代码
import java.util.Stack;public class StringReverse {/*** 取得当前字符并和之前的字符append起来*/public static String reverse1(String s) {int length = s.length();String reverse = "";for (int i=0; i<length; i++)reverse = s.charAt(i) + reverse;return reverse;}/*** 将字符从后往前的append起来*/public static String reverse2(String s) {char[] array = s.toCharArray();String reverse = "";for (int i = array.length - 1; i >= 0; i--) {reverse += array[i];}return reverse;}/*** 二分交换,将后面的字符和前面对应的那个字符交换*/public static String reverse3(String str) {// write code hereint i=0;int j=str.length()-1;char[]res=str.toCharArray();while(i<j){char temp= res[i];res[i]=res[j];res[j]=temp;i++;j--;}return new String(res);}/*** 原理是使用异或交换字符串* a=a^b;* b=b^a;* a=b^a;*/public static String reverse4(String s) {char[] array = s.toCharArray();int begin = 0;int end = s.length() - 1;while (begin < end) {array[begin] = (char) (array[begin] ^ array[end]);array[end] = (char) (array[end] ^ array[begin]);array[begin] = (char) (array[end] ^ array[begin]);begin++;end--;}return new String(array);}/*** 基于栈先进后出的原理*/public static String reverse5(String s) {char[] array = s.toCharArray();Stack<Character> stack = new Stack<Character>();for (int i = 0; i < array.length; i++)stack.push(array[i]);String reverse = "";for (int i = 0; i < array.length; i++)reverse += stack.pop();return reverse;}}
