大讯飞笔试题--吵架问题

题目描述:

有 n 个人排成了一行队列,每个人都有一个站立的方向:面向左或面向右。由于这 n 个人中每个人都很讨厌其他的人,所以当两个人面对面站立时,他们会发生争吵,然后其中一个人就会被踢出队列,谁被踢出队列都是有可能的。

我们用字符 L 来表示一个面向左站立的人,用字符 R 来表示一个面向右站立的人,那么这个队列可以用一个字符串描述。比如 RLLR 就表示一个四个人的队列,其中第一个人和第二个人是面对面站立的。他们发生争吵后队列可能会变成 LLR,也可能变成 RLR;若变成 RLR,则第一个人与第二个人还会发生争吵,队列会进一步变成 LR 或者 RR。

若在某个时刻同时可能有很多的争吵会发生时,接下来只会发生其中的一个,且任意一个都是有可能发生的。

你想知道经过一系列的争吵后,这个队列最少会剩下多少人?

输入

第一行包含一个有字符 L 和 R 构成的字符串。1 ≤字符串长度≤ 10^5

样例输入

LRRLRL

样例输出

2

Hint

一种可能的变化情况是:LRRLRL -> LRLRL -> LRRL -> LRL -> LR

思路:

见代码中注释,题目要求最少剩余人数,故不考虑很多人同时吵架等情形,只考虑最小值情形。

import java.util.*;

public class TC1{
	static String remain(String str){
		//int len = str.length();
		int t = str.indexOf("RL");
		//System.out.println(str.indexOf("RL"));
		if(t==0||str.charAt(t-1)=='L'){
			String str2 = "";
			//System.out.println(str);
			str2 = str.substring(0,t+1)+str.substring(t+2);
			return str2;
		}
		else{
			String str2 = "";
			str2 += str.substring(0,t)+str.substring(t+1);
			return str2;
		}
	}
	//System.out.println());
	//LRRLRL
	public static void main(String[] args){
		TC1 tc = new TC1();
		Scanner scanner = new Scanner(System.in);
		String str = scanner.next();
		//System.out.println(str);
	    while(str.indexOf("RL")>-1){
	    	str = tc.remain(str);
	    }
		System.out.println(str.length());
	}

}

反思:1.string str 置为空时 用 str = “”;
2.java删除字符或者子串的时候先用indexOf找到删除字符或者子串位置 t ,再用substring方法空串加上(0,t)和(t+1)的字符串并返回.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值