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、分析与解答
最基本的想法就是首尾交换,将第一个与最后一个,第二个与倒第二个交换,依次进行直到中间即可。
3、变换顺序,使用栈明显管用
注意:这里使用了StringBuilder来追加字符。
4、使用位运算中的异或
使用异或可以在不引入第三变量的情况下交换两个变量的值,如下:
A = A ^ B;
B = A ^ B ( = A );
A = B ^ A (= A ^ A ^ B = B);
即把第一种方法中的交换改为二进制的即可。有一点要注意:必须要进行(char)的强制转换。
5、补充:当然还有一些别的算法,比如根据字符数组逆序输出,还可以递归。
递归原理:每次把字符串的第一位移动到最后一位,如果只剩一个(或为空),直接返回。
可以参考:https://www.cnblogs.com/JohnTsai/p/5606719.html
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
相关文章推荐
- LeetCode——344. Reverse String(字符串反转)
- LeetCode----344. Reverse String 字符串反转
- [LeetCode]344. Reverse String(反转字符串)
- 344. Reverse String (字符串反转/逆序)
- LeetCode344——Reverse String(将字符串反转)
- 344. Reverse String (字符串)
- 字符串- leetcode 344. Reverse String
- Leetcode 344 Reverse String 字符串处理
- [Leetcode,python] Reverse String 反转字符串
- LeetCode 344. Reverse String(字符串翻转)
- [Leetcode,python] Reverse String 反转字符串
- leetcode解题之344. Reverse String & 345. Reverse Vowels of a String Java版(反转字符串)
- [Leetcode,python] Reverse String 反转字符串
- Reverse String 字符串反转
- LeetCode | 344. Reverse String 字符串水题
- LeetCode Reverse String(字符串反转)
- [Leetcode,python] Reverse String 反转字符串
- LeetCode 344: Reverse String (字符串翻转)
- [Leetcode,python] Reverse String 反转字符串
- [Leetcode,python] Reverse String 反转字符串