A AK的距离

时间限制 : - MS   空间限制 : - KB 
评测说明 : 1s,128m
问题描述

同学们总想AK。
于是何老板给出一个由大写字母构成的字符串,他想你帮忙找出其中距离最远的一对'A'和'K'。
比如下列字符串:
BKABGKWAXKA
距离最远一对'A'和'K'的间距为6,它们之间间隔了6个字符。

输入格式

一行,一个由大写字母构成的字符串

输出格式

一个整数,表示A和K最远的间距。要求A必须在K的左侧,如果不存在,输出-1

样例输入 1

BKABGKWAXKA

样例输出 1

6

样例输入 2

KKKKKKKKKKAAAAAAAAAAAAAAA

样例输出 2

-1

提示

1<=字符串的长度<=10000

【分析】

  第一道,肯定是签到题。按照题目德意思从字符串最前面找到第一个‘A’的下标,和最后面找到第一个‘K’的下标,相减即可。

【标程】

 1 #include<iostream>
 2 using namespace std;
 3 int Left, Right, L, R;
 4 bool K_L, K_R;    // 用于标记是否找到
 5 string S;
 6 void ini() {
 7     ios::sync_with_stdio(false);
 8     cin >> S;
 9 }
10 void solve() {
11     Left = 0;
12     Right = S.length();
13     while (!K_L || !K_R) {
14         if (S[Left] != 'A')++ Left;
15         else L = Left, K_L = 1;
16         if (S[Right] != 'K')-- Right;
17         else R = Right, K_R = 1;
18         if (Left > Right)break;   // 特判是否无解,防止死循环
19     }
20     if (K_L && K_R)
21         printf("%d", R - L - 1);
22     else printf("-1");
23 }
24 int main() {
25     ini();
26     solve();
27     return 0;
28 }

猜你喜欢

转载自www.cnblogs.com/Limbo-To-Heaven/p/11335727.html