1:字符串逆置
个人理解
- 首先将字符串变为数组
- 将里面的数组元素进行逆置,用双指针的思想进行交换位置
- 将交换位置的数组元素再变为字符串返回(这里将数组元素变为字符串又有两种情况:1:return new String(value) ~~~~ 2:return String.copyValueOf(value); )
代码实现
public class TestDemo {
public static String reverse(String str,int begin,int end){
char[] value = str.toCharArray();//先将字符串变成字符数组
while (begin < end){
char tmp = value[begin];
value[begin] = value[end];
value[end] = tmp;
begin++;
end--;
}
//方法1:return new String(value);//将数组转化为字符串
return String.copyValueOf(value);//方法2:直接将value数组变成String类型
}
public static void main(String[] args) {
String str = "abcdefg";
String ret = reverse(str,0,str.length()-1);
System.out.println(ret);
}
}
输出为:
2:翻转字符串
题目描述
给一个字符类型的数组chas和一个整数size,请把大小为size的左半区整体右移到右半区,右半区整体移动到左边。
输入描述
输入两行,第一行一个整数,代表size,第二行一个字符串,代表chas(1<=size<=length<=10^5)
输出描述
输出一行字符串,代表翻转后的字符串。
示例描述
个人理解
- 首先将前size个字符进行逆置
- 再将剩下的字符进行逆置
- 然后将所有的字符进行逆置
图解示例:
代码实现
import java.util.*;
public class Main{
public static String reverse(String str,int begin,int end){//逆置函数
char[] value = str.toCharArray();
while(begin < end){
char tmp = value[begin];
value[begin] = value[end];
value[end] = tmp;
begin++;
end--;
}
return String.copyValueOf(value);
}
public static String func(String str,int n){
if(str == null || n <= 0|| n >= str.length()){
return null;
}
String str1 = reverse(str,0,n-1);
String str2 = reverse(str1,n,str1.length()-1);
String str3 = reverse(str2,0,str2.length()-1);
return str3;
}
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
String str = scan.next();
String str4 = func(str,n);
System.out.println(str4);
}
}