题目描述:写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)
题目其实很简单,就是反转字符串,这类题目是很常见的。
方法一:双指针
使用双指针,一个指针i指向字符串的起点,另外一个指针j指向字符串的最末端,两者指向的位置的字符进行交换,然后两个指针往中间移动。
代码:
public String solve (String str) { // write code here char[] chars = str.toCharArray(); //定义两个指针,一个指向最前面,一个指向最末端 int i = 0; int j = str.length()-1; while(i < j){ // 对两个指针指向的位置的字符进行交换 char tmp = chars[i]; chars[i] = chars[j]; chars[j] = tmp; // 两个指针往中间移动 i++; j--; } return new String(chars); }
复杂度分析:
时间复杂度:。需要遍历 的次数。
空间复杂度:。用到了数组进行存储, 为字符串的长度。
方法二:反向输出
将原来的字符串反向遍历,然后利用一个的空间进行接收,最后得到的即为反转后的形式。
代码:
public String solve (String str) { // write code here // 用StringBuffer进行接收str的反向遍历的字符 StringBuffer sb = new StringBuffer(); for(int i = str.length()-1; i >= 0; i--){ sb.append(str.charAt(i)); } return sb.toString(); }
复杂度分析:
时间复杂度:。需要遍历 次。
空间复杂度:。用到了数组进行存储, 为字符串的长度。
方法三:直接使用StringBuffer的reverse()方法实现反转
public String solve (String str) { // write code here StringBuffer sb = new StringBuffer(str); return sb.reverse().toString(); }
复杂度分析:
时间复杂度:。函数底层的遍历次数 。
空间复杂度:。用到了数组进行存储, 为字符串的长度。