题解 | #字符串反转#
字符串反转
http://www.nowcoder.com/practice/e45e078701ab4e4cb49393ae30f1bb04
题意整理。
- 输入一行只包含小写字母的字符串。
- 反转该字符串,并输出。
方法一(利用StringBuilder)
1.解题思路
- 定义可变字符串res,将输入字符串加入到res。
- 反转res之后,再以字符串形式输出。
2.代码实现
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
//新建StringBuilder
StringBuilder res=new StringBuilder();
//添加字符串s
res.append(s);
//反转res,再转化为字符串输出
System.out.println(res.reverse().toString());
}
}
3.复杂度分析
- 时间复杂度:字符串长度不超过1000,为常数级别,所以时间复杂度为。
- 空间复杂度:需要额外常数级别的空间,所以空间复杂度为。
方法二(反转)
1.解题思路
- 首先将输入字符串转化为字符数组。
- 利用双指针反转字符数组。
- 将字符数组转化为字符串形式,并输出。
图解展示:
2.代码实现
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
//转化为字符数组
char[] arr=s.toCharArray();
//反转字符数组
reverse(arr);
//再将字符数组转化为字符串,并输出
System.out.println(String.valueOf(arr));
}
//字符数组反转
private static void reverse(char[] arr){
//定义指针
int l=0;
int r=arr.length-1;
while(l<r){
//交换对应的值
char temp=arr[l];
arr[l]=arr[r];
arr[r]=temp;
//左指针后移,右指针前移
l++;
r--;
}
}
}
3.复杂度分析
- 时间复杂度:字符串长度不超过1000,为常数级别,所以时间复杂度为。
- 空间复杂度:需要额外常数级别的空间,所以空间复杂度为。
xqxls的题解 文章被收录于专栏
牛客题解