1. 程式人生 > >2018科大訊飛校招筆試題

2018科大訊飛校招筆試題

原題如下:

爭吵
時間限制:C/C++語言 2000MS;其他語言 4000MS
記憶體限制:C/C++語言 65536KB;其他語言 589824KB
題目描述:
有 n 個人排成了一行佇列,每個人都有一個站立的方向:面向左或面向右。由於這 n 個人中每個人都很討厭其他的人,所以當兩個人面對面站立時,他們會發生爭吵,然後其中一個人就會被踢出佇列,誰被踢出佇列都是有可能的。
 
我們用字元 L 來表示一個面向左站立的人,用字元 R 來表示一個面向右站立的人,那麼這個佇列可以用一個字串描述。比如 RLLR 就表示一個四個人的佇列,其中第一個人和第二個人是面對面站立的。他們發生爭吵後佇列可能會變成 LLR,也可能變成 RLR;若變成 RLR,則第一個人與第二個人還會發生爭吵,佇列會進一步變成 LR 或者 RR。
 
若在某個時刻同時可能有很多的爭吵會發生時,接下來只會發生其中的一個,且任意一個都是有可能發生的。
 
你想知道經過一系列的爭吵後,這個佇列最少會剩下多少人?
輸入
第一行包含一個有字元 L 和 R 構成的字串。
1 ≤字串長度≤ 105
輸出
輸出佇列中最少會剩下多少人。


樣例輸入
LRRLRL
樣例輸出
2


Hint
一種可能的變化情況是這樣的:
LRRLRL -> LRLRL -> LRRL -> LRL -> LR

c++程式碼:

#include <iostream>
#include <vector>
#include <string>
using namespace std;


int main()
{
string s;
cin >> s;
int minR = -1;
int maxL = -1;
for (int i = 0; i < s.size(); i++)
{
if (s[i] == 'R')
{
minR = i;
break;
}

}
for (int i = s.size()-1; i >=0; i--)
{
if (s[i] == 'L')
{
maxL = i;
break;
}


}
if (maxL == -1 || minR == -1)
cout << s.size() << endl;
else if (minR > maxL)
cout << s.size() << endl;
else
cout << minR + s.size()-maxL << endl;






return 0;
}