时间限制 : - 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 }