雖然為水題,但是我的算法還是比較一般。思想是切分單詞的思想,確定切分開始條件,結束條件,在[b,e)之間就是所得單詞,因為單詞以X作為間隔,為了保證算法正確性,需要在末尾添加X。算法如下
1 #include <stdio.h>
2 #include <string.h>
3 #define MAXN 86
4 int main() {
5
6 int n;
7 char buf[MAXN] = {0};
8 scanf("%d", &n);
9 typedef enum {
10 WordIn,
11 WordOut,
12 } Word;
13 while ( n--> 0) {
14
15 scanf("%s", buf);
16 int sum = 0, b = 0, e = 0, len = strlen(buf);
17 buf[len++] = 'X', buf[len] = '\0';
18 Word word = WordOut;
19
20 // 遍歷字符串
21 for (int i = 0; buf[i]; i++) {
22
23 // 記錄單詞開頭
24 if (buf[i] == 'O') {
25
26 b = word == WordOut? ( word = WordIn, i) : b;
27
28 }else {
29
30 // 記錄單詞結尾,并作統計
31 if (word == WordIn) {
32 word = WordOut;
33 e = i;
34 int max = e - b;
35 sum += max*(max + 1) / 2;
36 }
37
38 }
39 }
40 printf("%d\n", sum);
41 }
42 return 0;
43 }
by sixleaves