您的位置:首页 > 其它

344. Reverse String 字符串反转

2018-02-27 19:41 369 查看
1、题目:

Write a function that takes a string as input and returns the string reversed.

Example:

Given s = “hello”, return “olleh”.

2、分析与解答

最基本的想法就是首尾交换,将第一个与最后一个,第二个与倒第二个交换,依次进行直到中间即可。

class Solution {
public String reverseString(String s) {
int len = s.length();
char[] arr = s.toCharArray();
int low = 0;
int high = len - 1;
while(low < high){
char tmp = arr[low];
arr[low] = arr[high];
arr[high] = tmp;
low++;//这里易忘
high--;
}
return String.valueOf(arr);//将字符数组转换为字符串
}
}


3、变换顺序,使用明显管用

public String reverseString(String s) {
int len = s.length();
char[] arr = s.toCharArray();
Stack<Character> stack = new Stack<Character>();
for(int i=0;i<len;i++){
stack.push(arr[i]);
}
StringBuilder sb = new StringBuilder();
while(!stack.isEmpty())
sb.append(stack.pop());
return sb.toString();
}


注意:这里使用了StringBuilder来追加字符。

4、使用位运算中的异或

使用异或可以在不引入第三变量的情况下交换两个变量的值,如下:

A = A ^ B;

B = A ^ B ( = A );

A = B ^ A (= A ^ A ^ B = B);

即把第一种方法中的交换改为二进制的即可。有一点要注意:必须要进行(char)的强制转换。

public String reverseString(String s) {
char[] arr = s.toCharArray();
int low = 0;
int high = arr.length - 1;
while(low < high){
arr[low] = (char)(arr[low] ^ arr[high]);//注意这里
arr[high] = (char)(arr[low] ^ arr[high]);
arr[low] = (char)(arr[high] ^ arr[low]);
low++;
high--;
}
return new String(arr);
}


5、补充:当然还有一些别的算法,比如根据字符数组逆序输出,还可以递归

public String reverseString(String s) {
if(s == null || s.length() <= 1)
return s;
return reverseString(s.substring(1)) + s.charAt(0);
}


递归原理:每次把字符串的第一位移动到最后一位,如果只剩一个(或为空),直接返回。

可以参考:https://www.cnblogs.com/JohnTsai/p/5606719.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: