科大讯飞校招
题目描述:
有 n 个人排成了一行队列,每个人都有一个站立的方向:面向左或面向右。由于这 n 个人中每个人都很讨厌其他的人,所以当两个人面对面站立时,他们会发生争吵,然后其中一个人就会被踢出队列,谁被踢出队列都是有可能的。
我们用字符 L 来表示一个面向左站立的人,用字符 R 来表示一个面向右站立的人,那么这个队列可以用一个字符串描述。比如 RLLR 就表示一个四个人的队列,其中第一个人和第二个人是面对面站立的。他们发生争吵后队列可能会变成 LLR,也可能变成 RLR;若变成 RLR,则第一个人与第二个人还会发生争吵,队列会进一步变成 LR 或者 RR。
若在某个时刻同时可能有很多的争吵会发生时,接下来只会发生其中的一个,且任意一个都是有可能发生的。
你想知道经过一系列的争吵后,这个队列最少会剩下多少人?
输入
第一行包含一个有字符 L 和 R 构成的字符串。
1 ≤字符串长度≤ 105
输出
输出队列中最少会剩下多少人。
样例输入
LRRLRL
样例输出
2
Hint
一种可能的变化情况是这样的:
LRRLRL -> LRLRL -> LRRL -> LRL -> LR
思路一:遍历,第一遍将RL标记为XX,接着若有RX,XL也标记为XX,判断条件:再一次遍历后X个数不变,将相连的X的长度记为1加上其他不为X的个数。
思路二:只有当R全都在L的右边时,才不会发生争吵。故找到最左边的R和最右边的L,将位于两者中间的所有元素去除即为不发生争吵的最少人数。
代码:
import java.util.scanner;
public class Test1 {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
char[] chars = str.toCharArray();
int r = -1;
int l = -1;
for (int i = 0; i < chars.length; i++) {
if (chars[i] == 'R') {
r = i;
break;
}
}
for (int i = chars.length - 1; i >= 0; i--) {
if (chars[i] == 'L') {
l = i;
break;
}
}
if (r == -1||l == -1) {
System.out.println(chars.length);
}else if (r>l) {
System.out.println(chars.length);
}else {
System.out.println(chars.length - (l - r));
}
}
}
相关阅读
import requestsimport timeimport json url = ' https://careers.tencent.com/tencentcareer/api/post/Query?' page = input('
参考:CRC校验原理及步骤https://blog.csdn.net/d_leo/article/details/73572373 什么是CRC校验? CRC即循环冗余校验码:是数据通信领
这个知识点很重要,耳机也有儿童款!飞利浦CoolPlay儿童耳
在这个全民娱乐的时代,用手机或平板看看视频早已成为了生活中必不可少的一部分,这种吸引力大人都难以抗拒,小孩子就更加欲罢不能了。
微信公众号初期,有多少大号做粉丝是用过“诱导”策略的?移动互联网时代,有多少社交APP是引入了明星小鲜肉的?2018年创业
体育爱好者不少,体育直播是这一群体观看赛事的重要渠道,面对庞大的用户群体和市场规模,腾讯体育却出现负增长。未来,从产品到运营,腾讯