题目描述:
有 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)的字符串并返回.