內容
大家都知道,在高速公路上旁都有無數的快餐店。
人們可以輕鬆地買到漢堡包,熱狗,比薩,三明治等等食物。
但是很多時候,問題不是找到餐館而是藥局。一頓豐盛的午餐後,我們通常需要去買胃藥,因為我們年紀大了。
給定高速公路上餐廳和藥局的位置,你想要確定餐廳和藥局之間的最短距離。
輸入說明
輸入含有多組測資。
每組測資有兩行,第一行有一個正整數 L (1 <= n <= 2000000),L代表公路的長度。
如果L = 0代表輸入結束。
第二行為長度L的字串,代表沿著公路的餐廳和藥局的位置。
字串的內容如下:
1. 'R'代表這個位置有餐廳
2. 'D'代表這個位置有藥局
3. 'Z'代表這個位置同時有餐廳和藥局
4. '.'代表這個位置什麼都沒有
每組測資中至少有一間餐廳和一間藥局。
輸出說明
對於每組測資,輸出餐廳和藥局之間的最短距離。
範例輸入 #1
2 RD 5 ..Z.. 10 .R......D. 10 .R..Z...D. 10 ...D..R... 25 ..D...R.RR...DD...D.R...R 0
範例輸出 #1
1 0 7 0 3 2

C++:
/*
Sample Input #1
2
RD
5
..Z..
10
.R......D.
10
.R..Z...D.
10
...D..R...
25
..D...R.RR...DD...D.R...R
0
Sample Output #1
1
0
7
0
3
2
*/
#include <iostream>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n;
string s;
while(cin>>n){
if(n==0)break;
cin>>s;
int R=-1,D=-1,mn=20000005;
for(int i=0;i<n;i++){
if(s[i]=='Z'){mn=0;break;}
else if(s[i]=='R'){
if(D>=0)mn=min(mn,i-D);
R=i;
}
else if(s[i]=='D'){
if(R>=0)mn=min(mn,i-R);
D=i;
}
}
cout<<mn<<"\n";
}
return 0;
}
python:
while True:
try:
n=int(input())
if n==0:break
arr=list(input()[::1])
R=-1
D=-1
mn=20000005
for i in range(n):
if(arr[i]=="Z"):mn=0;break
elif (arr[i]=="R"):
if D>-1:
if(i-D<mn):mn=i-D
R=i
elif (arr[i]=="D"):
if R>-1:
if(i-R<mn):mn=i-R
D=i
print(mn)
except:break
