时间限制 : - 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’的下标,相减即可。

【标程】

 #include<iostream>
using namespace std;
int Left, Right, L, R;
bool K_L, K_R; // 用于标记是否找到
string S;
void ini() {
ios::sync_with_stdio(false);
cin >> S;
}
void solve() {
Left = ;
Right = S.length();
while (!K_L || !K_R) {
if (S[Left] != 'A')++ Left;
else L = Left, K_L = ;
if (S[Right] != 'K')-- Right;
else R = Right, K_R = ;
if (Left > Right)break;   // 特判是否无解,防止死循环
}
if (K_L && K_R)
printf("%d", R - L - );
else printf("-1");
}
int main() {
ini();
solve();
return ;
}

另:

  这是@羽错光阴 童鞋的代码,也略有借鉴之处——

 #include<cstdio>
using namespace std;
char A[], c = 'A';
int i = , pos, pos2;
int main(){
while(c >= 'A' && c <= 'Z'){
c = getchar();
A[i ++] = c;
}
for (pos = ; pos <= i; pos ++)if (A[pos] =='A')break;
for (pos2 = i; pos2 >= ; pos2 --)if (A[pos2] == 'K')break;
if (pos2 <= pos || pos2 == || pos == i) {
puts("-1");
return ;
}
printf("%d", pos2 - pos - );
}

  其中的读入部分:

while(c >= 'A' && c <= 'Z')

  因为空格不属于字母范围,成功且简便地解决了读入问题。

最新文章

  1. understand dojo/domReady!
  2. SQLSERVER全文搜索
  3. SOAPUI测试步骤之流量控制(Conditional Goto)
  4. 二级c程序设计题(2)
  5. 【LINUX】Linux学习小结
  6. dsPIC33EP ADC模块初始化及应用实例
  7. B - Broken Keyboard (a.k.a. Beiju Text)
  8. javascript笔记——js的阻塞特性[转载]
  9. WinForms 小型HTML服务器
  10. 在Yii框架中使用PHPExcel
  11. hdu 4454 Stealing a Cake(三分法)
  12. Java 获取指定日期范围内的每个月,每季度,每一年
  13. SourceTree安装跳过登录
  14. VisualStudioCode创建的asp.net core项目部署到linux,使用nginx代理
  15. redux源码解读(二)
  16. 动画库NineOldAndroids
  17. OpenCV代码:画出轮廓的外接矩形,和中心点
  18. vue.js使用typescript踩坑记
  19. Python中函数的参数传递与可变长参数
  20. 解决AttributeError: &#39;Ui_MainWindow&#39; object has no attribute &#39;show&#39;报错

热门文章

  1. ES6的编程风格
  2. 逐浪CMS全面升级为.NET Core 3.0性能大提升
  3. 简说python之安装
  4. 建议5:比较function语句和function表达式
  5. 原创】Java并发编程系列2:线程概念与基础操作
  6. git提交更改都是一个作者
  7. 150多个Flutter组件详细介绍送给你
  8. CKafka如何助力腾讯课堂实现百万消息稳定互动?
  9. Frist
  10. Mol Cell Proteomics. | 用于鉴定新型融合转录本及其在癌细胞中的潜在翻译产物的多功能蛋白质组基因组学工具FusionPro