一個字母一個字母去做。
如果讀到D,就看看在這之前是否有R被讀到,若有R則計算D到R的距離並和min比大小,取較小者﹔反之,若沒有R在之前被讀到,這樣的話什麼事情都不用做。無論是上面兩種情況中的任何一種,做完以後都要把D的位置紀錄下來。
如果讀到R,就看看在這之前是否有D被讀到,若有D則計算R到D的距離並和min比大小,取較小者﹔反之,若沒有D在之前被讀到,這樣的話什麼事情都不用做。無論是上面兩種情況中的任何一種,做完以後都要把R的位置紀錄下來。
#include <stdio.h>
int min(int a, int b)
{
if (a > b)
return b;
else
return a;
}
int main(void)
{
char ch;
int i, r, d, n, m, s;
while (scanf("%d", &n) == 1 && n)
{
getchar();
r = d = -1;
i = 0;
m = 2000001;
while ((ch = getchar()) != '\n' && i < n)
{
if (ch == 'Z')
{
m = 0;
while (getchar() != '\n')
continue;
break;
}
else if (ch == 'D')
{
if (r >= 0)
{
s = i-r;
m = min(m, s);
r = -1;
}
d = i;
}
else if (ch == 'R')
{
if (d >= 0)
{
s = i-d;
m = min(m, s);
d = -1;
}
r = i;
}
i++;
}
printf("%d\n", m);
}
return 0;
}
沒有留言:
張貼留言