import java.util.*; import java.lang.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { String str = new Scanner(System.in).nextLine(); StringBuffer sb = new StringBuffer(str); int p = 0; while(p<sb.length()){ if(sb.substring(p,p+1).equals("L")){ int left = p, right=p+1; while(right<sb.length() && sb.substring(right,right+1).equals(".")) right+=1; if(right>=sb.length()) break; if(sb.substring(right,right+1).equals("L")) for(int i=left;i<right;i++) sb.replace(i,i+1,"L"); p = right; }else if(sb.substring(p,p+1).equals("R")){ int left = p, right=p+1; while(right<sb.length() && sb.substring(right,right+1).equals(".")) right+=1; if(right>=sb.length()) break; if(sb.substring(right,right+1).equals("R")) for(int i=left;i<right;i++) sb.replace(i,i+1,"R"); if(sb.substring(right,right+1).equals("L")) { if((right-left)%2!=0){ for(int i=left;i<left+(right-left)/2+1;i++) sb.replace(i,i+1,"R"); for(int i=left+(right-left)/2+1;i<right;i++) sb.replace(i,i+1,"L"); }else{ for(int i=left;i<left+(right-left)/2;i++) sb.replace(i,i+1,"R"); for(int i=left+(right-left)/2+1;i<right;i++) sb.replace(i,i+1,"L"); } } p = right; } else p+=1; } //头尾 if(sb.length()>1 && sb.substring(0,1).equals(".") && sb.substring(1,2).equals("L")) sb.replace(0,1,"L"); if(sb.length()>1 && sb.substring(sb.length()-1,sb.length()).equals(".") && sb.substring(sb.length()-2,sb.length()-1).equals("R")) sb.replace(sb.length()-1,sb.length(),"R"); System.out.println(sb.toString()); } }
个人经验:
复杂的逻辑,这种模拟题我非常容易犯错,代码出bug,因为我是跳跃思维,不细心,反复地检查和debug会浪费大把的时间。
这里给出一个针对类似我这种性格的人的办法:①从简单的用例测起 + ②从简单的逻辑写起
解释一下上面2点,就是:不用一开始就全部把逻辑代码写完,先写一些核心的,简单的逻辑,舍弃掉其他的逻辑,用例也只验这一种情况,举个例子:有个题目要讨论奇偶,你就只写奇数的情况,然后也只给奇数用例,例如1、3,非常简单好测,弄明白了之后再逐步讨论其他的情况,最后边debug边写完了代码,不用重复返工,即便要返工,修改的工作量也不会很多