题目:
思路:
这个是先找出左半边元素的总长度和空格的得数,然后计算出替换后的数组的总长度,接着从最后的位置开始进行替换。
代码:
public class zs2{ public static void main(String[]args){ Scanner sc=new Scanner(System.in); String a=sc.nextLine(); char chas[]=a.toCharArray(); int num=0; int len=0; for(len=0;len<chas.length&&chas[len]!='0';len++){ if(chas[len]==' ') num++; } int j=len+2*num-1; for(int i=len-1;i>-1;i--){ if(chas[i]!=' '){ chas[j--]=chas[i]; } else{ chas[j--]='0'; chas[j--]='2'; chas[j--]='%'; } } for(int i=0;i<chas.length;i++){ System.out.print(chas[i]+" "); } } }
补充题目:
思路:
这个思路也是从后往前进行处理。如果该位置是数字就进行复制;如果不是指针j保持不变,指针i继续往前,知道找到不是*的情况。我自己在写的时候出现的错误是for循环里面变量的范围不对。
代码:
public class zs2{ public static void main(String[]args){ Scanner sc=new Scanner(System.in); String a=sc.nextLine(); char[] b=a.toCharArray(); int j=b.length-1; for(int i=b.length-1;i>-1;i--){ if(b[i]!='*'){ b[j--]=b[i]; } } for(int i=0;i<=j;i++){ b[i]='*'; } for(int i=0;i<b.length;i++){ System.out.print(b[i]); } } }