翻转字符串
翻转字符串
- 字符串反转
- 题目分析
- 翻转字符串(2)
- 题目分析
字符串反转
- 来源:牛客网 链接:https://www.nowcoder.com/questionTerminal/e45e078701ab4e4cb49393ae30f1bb04[链接][Link 1]
- 接受一个只包含小写字母的字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)
- 输入描述:
输入一行,为一个只包含小写字母的字符串。
- 输出描述:
输出该字符串反转后的字符串。
- 示例1
- 输入
abcd
- 输出
dcba
题目分析
本题,主要的任务就是将字符串逆置过来,我们可以通过,将字符串转换为字符数组,然后将字符数组进行逆置,最后返回一个逆置完成的字符串:
源码如下:
import java.util.Scanner;
public class Main {
private static String resver(String s) {
char[] arr = s.toCharArray();
for (int i = 0; i < arr.length / 2; i++) {
char tmp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = tmp;
}
return new String(arr);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
String ret = resver(s);
System.out.println(ret);
}
}
翻转字符串(2)
- 来源:牛客网 链接:https://www.nowcoder.com/questionTerminal/79c562297c0e4ff0952ef39ecde1bd6b
链接 - 给一个字符类型的数组chas和一个整数size,请把大小为size的左半区整体右移到右半区,右半区整体移动到左边。
- 输入描述:
输入两行,第一行一个整数,代表size,第二行一个字符串,代表chas
- 输出描述:
输出一行字符串,代表翻转后的字符串。
- 示例1
- 输入
3
abcdefg- 输出
defgabc
- 备注:
时间复杂度O(n)O(n),额外空间复杂度O(1)O(1)。
题目分析
当我们看到这个题目的时候,一般都会想,转换成字符数组,然后将它前面的拿出来,后边放前面,然后完成任务。
这样的做法,也可以,但是我们还可以用巧妙的方法求解:
例如:
这样的做法,只需要进行三次逆置即可,大大的降低了时间复杂度。
代码:
import java.util.*;
public class Main {
//逆置字符串
private static String reverse(String s, int begin, int end) {
char[] arr = s.toCharArray();
while (begin < end) {
char tmp = arr[begin];
arr[begin] = arr[end];
arr[end] = tmp;
begin++;
end--;
}
return String.valueOf(arr);
}
private static String func(int n, String s) {
//判断字符串是否为空
if (s == null || n <= 0 || n >= s.length()) {
return null;
}
s = reverse(s, 0, n - 1);
s = reverse(s, n, s.length() - 1);
s = reverse(s, 0, s.length() - 1);
return s;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
String s = sc.next();
String ret = func(n, s);
System.out.println(ret);
}
}
}
还没有评论,来说两句吧...