2020秋招招商银行编程——数轴机器人移动

题目描述:

  1. 在一根数轴上,1-n的每个点上都标有’L’,或者’R’,最初每一个点上都有一个机器人,如果该点上标有’L’,则机器人左移,如果该点上标有’R’则机器人右移,移动操作10^100次。

    保证1上的为’R’,点n上的为’L’,求最终每一个点上有多少个机器人。

输入描述:输入包括一根只包含’R’,和’L’字符串s,表示初始化的时候每个点的标记。
2<=|s|<=10的5次方,其中|s|表示字符串的长度。

测试样例:

输入一: RRLRL
输出:0 1 2 1 1

输入二:RRRRRLRLRL
输出为:0 0 0 0 3 3 1 1 1 1

使用到String类的两个方法:

int indexOf(int ch, int fromIndex);//返回从fromIndex开始第一个指定字符(ch)的索引
int lastIndexOf(int ch, int fromIndex);//返回截至fromIndex的最后一个指定字符(ch)的索引
public class Main {
	public static void resolve(String str) {
		int[] a = new int[str.length()];
		int index,lastIndex;
		for (int i = 0; i < str.length(); i++) {
			if (str.charAt(i)=='R') {//当前为‘R’
				index = str.indexOf('L',i);
				if( ((index-i)&1) == 0) {//右边第一个L的index与当前i的差值为偶数
					a[index]++;//当前(R)点的机器人会停在当前右边第一个L的位置上
				}else {//右边第一个L的index与当前i的差值为奇数
					a[index-1]++;//当前(R)点的机器人会停在当前右边第一个L的左边第一个R点
				}
			}else  {//当前为‘L’
				lastIndex = str.lastIndexOf('R',i);
				if ( ((i-lastIndex)&1) == 0) {//i与左边第一个R的index与差值为偶数
					a[lastIndex]++;//当前(L)点的机器人最终会停在当前左边第一个R点上
				}else {//同理。。
					a[lastIndex+1]++;
				}
			}
		}
		for (int temp :a) {//遍历虚区
			System.out.print(temp+" ");
		}
	}
	
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        resolve(str);
        in.close();
	}
}

你可能感兴趣的:(笔试)