🚩传送门:牛客题目
🍗鸡腿知识点:
异或运算符的特点是:数
**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 图示
解法 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 here
int 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;
}
}