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边写完了代码,不用重复返工,即便要返工,修改的工作量也不会很多

京公网安备 11010502036488号