注意:这道题的解法和最短摘要一样,都是采用尺取法解决问题,注意这儿题目要求恰好包含,也就是说这个hiho字符串必须包含2个'h'、1个'i'和1个'o'。一个不能多,一个也不能少。

 import java.util.Scanner;

 public class HihoStr {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
char[]w = str.toCharArray();
sovel(w);
} private static void sovel(char[] w) {
int min = Integer.MAX_VALUE;
int j = -1;
for (int i = 0; i < w.length; i++) {
char c = w[i];
if(check(c)){ //i停下
if (j==-1) { // j的第一次定位
j = i+1;
}
while(j<w.length){
char c2 = w[j];
if (check(c2)&&containsAll(w,i,j)) { // 全部囊括
if (check(w,i,j)&&j-i+1<min) { // 更新min
min = j-i+1;
}
break; // j停下
}
j++;
}
}
}
System.out.println(min==Integer.MAX_VALUE?-1:min);
} private static boolean containsAll(char[] w, int i, int j) {
int c1=0,c2=0,c3=0;
for (int k = i; k <= j; k++) {
if(w[k]=='h') c1++;
if(w[k]=='i') c2++;
if(w[k]=='o') c3++;
}
return c1>=2&&c2>=1&&c3>=1;
} /**
* 检查字符序列是否恰好包含2个h,一个i,一个o
* @param w
* @param i
* @param j
* @return
*/
private static boolean check(char[] w, int i, int j) {
int c1=0,c2=0,c3=0;
for (int k = i; k <= j; k++) {
if(w[k]=='h') c1++;
if(w[k]=='i') c2++;
if(w[k]=='o') c3++;
}
return c1==2&&c2==1&&c3==1;
} private static boolean check(char c) {
return c=='h'||c=='i'||c=='o';
} }

  结果:

    

  尺取法的模型:根据区间的特征交替推进左右端点求解问题,其高效的原因在于避免了大量的无效枚举,其区间枚举都是根据区间特征有方向的枚举,如果胡乱使用尺取法的话会使得枚举量减少,因而很大可能会错误,所以关键的一步是进行问题的分析!下面分析一下尺取法的过程:

    

    

字符串----hiho字符串(尺取法)的更多相关文章

  1. [51NOD1127]最短的包含字符串(尺取法)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1127 思路:尺取法,一开始我考虑更新右指针,直到遇到一个和l指 ...

  2. 51 nod 1127最短的包含字符串(尺取法)

    1127 最短的包含字符串   收藏  关注 给出一个字符串,求该字符串的一个子串S,S包含A-Z中的全部字母,并且S是所有符合条件的子串中最短的,输出S的长度.如果给出的字符串中并不包括A-Z中的全 ...

  3. hihocoder 1680 hiho字符串2 dp求方案数+递归

    我们定义第一代hiho字符串是"hiho". 第N代hiho字符串是由第N-1代hiho字符串变化得到,规则是: h -> hio i -> hi o -> ho ...

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

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

  5. CF 701C They Are Everywhere(尺取法)

    题目链接: 传送门 They Are Everywhere time limit per test:2 second     memory limit per test:256 megabytes D ...

  6. Codeforces 676C Vasya and String(尺取法)

    题目大概说给一个由a和b组成的字符串,最多能改变其中的k个字符,问通过改变能得到的最长连续且相同的字符串是多长. 用尺取法,改变成a和改变成b分别做一次:双指针i和j,j不停++,然后如果遇到需要改变 ...

  7. Codeforces Round #364 (Div.2) C:They Are Everywhere(双指针/尺取法)

    题目链接: http://codeforces.com/contest/701/problem/C 题意: 给出一个长度为n的字符串,要我们找出最小的子字符串包含所有的不同字符. 分析: 1.尺取法, ...

  8. hdu 5510 Bazinga KMP+尺取法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5510 题意:至多50组数据,每组数据至多500个字符串,每个字符串的长度最长为2000.问最大的下标( ...

  9. hdu5672 尺取法

    StringTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Subm ...

随机推荐

  1. Security配置文件的基本配置及参数名详解

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  2. Java 两次MD5

    导入: import org.apache.commons.codec.digest.DigestUtils; 代码: public static String md5(String src) { r ...

  3. 从分布式一致性到共识机制(二)Raft算法

    春秋五霸说开 春秋五霸,是指东周春秋时期相继称霸主的五个诸侯,“霸”,意为霸主,即是诸侯之领袖.典型的比如齐桓公,晋文公,春秋时期诸侯国的称霸,与今天要讨论的Raft算法很像. 一.更加直观的Raft ...

  4. System.TimeoutException: The operation requested on PersistentChannel timed out

    这个异常是在使用EasyNetQ时,遇到的问题,找了两个小时. 详细错误 Error:System.TimeoutException: The operation requested on Persi ...

  5. 使用腾讯云服务器CentOS搭建JavaWeb环境

    yum list java* yum install java-1.7.0-openjdk* -y java -version cd /usr/local wget https://mc.qcloud ...

  6. 日常报错记录2: MyBatis:DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.------------ Cause: java.lang.NoSuchMethodException: com.offcn.dao.ShopDao.<init>()

     直接上干货:  报错归纳1: DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4 ...

  7. SpringBoot的Web开发

    一.创建Web项目 创建的时候勾选对应web选项即可,会自动引入相应的starter,pom如下: <dependency> <groupId>org.springframew ...

  8. python3_猜数字

    import random count = 0while count<3: count +=1 number = int(input("猜数字:").strip()) num ...

  9. leetcode刷题四<寻找两个有序数组的中位数>

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 ...

  10. Influxdb+Grafana+Telegraf及docker中运行

    目录 参考资料 1. InfluxDB 1. 特征: 2. 特点: 3. 功能及默认 4. 主要概念 1) 与SQL的名词做比较 2) InfluxDB的独有概念 5. 常用命令 1. 用户管理: 6 ...