hihocoder-Week243-hiho字符串

题目1 : hiho字符串

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

如果一个字符串恰好包含2个'h'、1个'i'和1个'o',我们就称这个字符串是hiho字符串。

例如"oihateher"、"hugeinputhugeoutput"都是hiho字符串。

现在给定一个只包含小写字母的字符串S,小Hi想知道S的所有子串中,最短的hiho字符串是哪个。

输入

字符串S

对于80%的数据,S的长度不超过1000

对于100%的数据,S的长度不超过100000

输出

找到S的所有子串中,最短的hiho字符串是哪个,输出该子串的长度。如果S的子串中没有hiho字符串,输出-1。

样例输入
happyhahaiohell
样例输出
5

题解:

  双指针滑动窗口,前后两个指针,如果缺少元素,则前指针前进,如果元素充足,则后指针前进,推进减少窗口。

#include <cstdlib>
#include <cstdio>
#include <cstring>
const int MAXN = 100000 + 10;char ch[MAXN];
int len, start_id, end_id, ans;
int h_num, i_num, o_num; bool check_validation()
{return (h_num >= 2 && i_num >= 1 && o_num >= 1);
}bool check_ok()
{return (h_num == 2 && i_num == 1 && o_num == 1);
}void add_item(int idx)
{if(ch[idx] == 'h'){h_num += 1; }else if(ch[idx] == 'i'){i_num += 1; }else if(ch[idx] == 'o'){o_num += 1; }
}void subtract_item(int idx)
{if(ch[idx] == 'h'){h_num -= 1; }else if(ch[idx] == 'i'){i_num -= 1; }else if(ch[idx] == 'o'){o_num -= 1;}
}int main(){ scanf("%s", ch); len = strlen(ch); start_id = 0; end_id = 0; h_num = i_num = o_num = 0;ans = len + 1; add_item(start_id); ++start_id; while(end_id < start_id){if(check_validation() || start_id >= len){if(check_ok()){ans = (ans < (start_id - end_id))?(ans):(start_id - end_id); }subtract_item(end_id);++end_id;  }else{add_item(start_id);++start_id; }}if(ans > len){ans = -1; }printf("%d\n", ans); return 0;
}

  

转载于:https://www.cnblogs.com/zhang-yd/p/10460946.html

hihocoder-Week243-hiho字符串相关推荐

  1. hiho #1485 : hiho字符串(滑动窗口)

    #1485 : hiho字符串 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 如果一个字符串恰好包含2个'h'.1个'i'和1个'o',我们就称这个字符串是hiho字符 ...

  2. hihocoder 1320 压缩字符串(字符串+dp)

    题解: 其实就是对应三种dp的转移方式 1.拼接类型 dp[i][j] = dp[i][c] + dp[c][j] 2.不变类型 dp[i][j] = j-i+1 3.重复类型(必须满足有k个循环节) ...

  3. hihoCoder 1095 HIHO Drinking Game 微软苏州校招笔试 12月27日

    由game规则可以看出,T越大超出d的可能性越大,对小ho越有利,其实我是通过打表才看出来这个单调性的==. 对T进行二分搜索,[0,K+1],因为如果N=1,那么应该有T=K+1,小ho才可以获胜. ...

  4. hiho一下 第三周---KMP算法

    KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上 ...

  5. 《数字图像处理》主编:曹茂永

    数字图像处理知识点 目录 数字图像处理知识点 第一章 概述 1.1数字图像处理相关概念 1.2数字图像处理系统流程图: 1.3 数字图像处理主要研究内容 第二章 数字图像处理基础 2.1图像的数字化及 ...

  6. 【Code】OJ推荐

    OJ 1.Virtual Judge 2.POJ(PKUOJ) 3.ZOJ 4.LA(UVALive) 5.HDU(HDOJ) 6.CodeForces(CF) 7.TopCoder 8.LibreO ...

  7. 一个简易的OJ导航界面

    一个简易的html文件 加了一张动图,做了简单的排版.把自己 最喜欢的诗句 和 日常用到的 OJ链接 放在了里面. Chrome设置--启动时打开特定网页: 把这个h5文件的路径添加到其中, 可以实现 ...

  8. 数据结构pintia_数据结构和算法(一)概述

    数据结构,用来描述数据间的关系 算法,指解决某一特定问题的步骤 数据结构为算法服务,算法是特定问题下的解决办法,故没有通用性算法,应具体问题具体分析 一.数据结构 以上为数据结构的逻辑结构,在计算机内 ...

  9. hiho一下 第四周 Hihocoder #1036 : Trie图

    #1036 : Trie图 时间限制:20000ms 单点时限:1000ms 内存限制:512MB 描述 前情回顾 上回说到,小Hi和小Ho接受到了河蟹先生伟大而光荣的任务:河蟹先生将要给与他们一篇从 ...

最新文章

  1. php中mvc控制器作用,理解PHP中的MVC编程之控制器
  2. cookie之登录用户凭证
  3. HDU 5787 wolf Number 数位dp
  4. VUE中父子组件传参(简单明了)
  5. matlab makesurf,matlab制作GIF之hello world
  6. 2017linux版本号,Linux基本命令 2017-11-27
  7. webRTC之Mesh/MCU/SFU通信架构区别(九)
  8. 分享过滤条件中增加一个自定义过滤变量插件代码
  9. andorid自定义ViewPager之——子ViewPager滑到边缘后直接滑动父ViewPager
  10. 未定义数组索引:_数据结构-数组
  11. Windows Workflow RC HOL学习笔记(四):使用Listen,Delay和event-based自定义Activities
  12. 深度学习与自然语言处理 | 斯坦福CS224n · 课程带学与全套笔记解读(NLP通关指南·完结)
  13. 学习Linux的第七十一天
  14. 远程桌面连接设置详细步骤
  15. Iphone连接Openwrt的IPSEC服务器
  16. (5)多体量子态与统计力学基础
  17. 基于uFUN开发板和扩展板的联网校准时钟
  18. 史记十表-卷十六-秦楚之际月表第四
  19. python语言入门全集-Python语言入门(一)
  20. 数据库DB与数据仓库DW区别和联系

热门文章

  1. JavaScript 里变量名前面加了大括号代表什么含义
  2. 来自Yang Terry的关于SAP CRM One Order事件回调机制的分享
  3. 主数据SAP Cloud for Customer产品主数据上维护的附件建模介绍
  4. CRM和C4C product category hierarchy的可编辑性控制逻辑
  5. 如何从ERP下载Sales BOM到CRM
  6. 道路交通安全违法行为图像取证技术规范_海康移动取证方案中的设备介绍
  7. java机试 数据结构_来看看阿里面试的一面都面了些什么笔试+机试(java岗)
  8. springmvc dao怎么可以不写实现类_SpringMVC(一)细聊ContextLoaderListener 是怎么被加载的...
  9. 安川g7变频器说明书_安川机器人故障维修合集
  10. python google buffer_python调用Google Protocol Buffer