题解 | #反转字符串#
反转字符串
http://www.nowcoder.com/practice/c3a6afee325e472386a1c4eb1ef987f3
题目
描述
- 写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)
方法一
思路
- 题目要求反转字符串,最简单的方法就是新建一个字符串对象s,对原字符串对象进行倒序遍历,写入s中,返回s。
具体步骤
- 代码如下:
import java.util.*; public class Solution { /** * 反转字符串 * @param str string字符串 * @return string字符串 */ public String solve (String str) { // write code here String res = ""; for(int i = str.length()-1; i >= 0 ; --i){ res += str.charAt(i); } return res; } }
- 时间复杂度:,单遍循环;
- 空间复杂度:,另创了一个新的字符串对象。
方法二
思路
方法一的虽然比较简单,但是其新建了一个字符串对象,同样可以考虑将字符串转换成字符数组,然后将首尾对调,只需遍历N/2次即可。
具体步骤
- 参考下图栗子
- 代码如下:
import java.util.*; public class Solution { /** * 反转字符串 * @param str string字符串 * @return string字符串 */ public String solve (String str) { // 字符串为空,长度为1 if (str == null || str.length() == 0 || str.length() == 1){ return str; } int i = 0; int j = str.length()-1; // 转换成字符数组 char[] characters = str.toCharArray(); // 遍历,对调 while(i<j){ char c = characters[j]; characters[j] = characters[i]; characters[i] = c; ++i; --j; } return new String(characters); } }
- 时间复杂度:,单遍循环O(n/2)即为;
- 空间复杂度:,另创了一个新的字符数组。