题目描述:写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过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();
} 复杂度分析:
时间复杂度:。
函数底层的遍历次数
。
空间复杂度:。用到了数组进行存储,
为字符串的长度。

京公网安备 11010502036488号