字符串逆置+翻转字符串(面试常考题)
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); } }
下一篇:
C/C++实现矩阵的基本操作