zoukankan      html  css  js  c++  java
  • [Offer收割]编程练习赛11 题目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

    思路

    维护一个h、i、o出现次数分别不低于2、1、1的滑动窗口,收敛窗口左边界,记录满足条件窗口的最小宽度。

    代码

     1 import java.util.HashMap;
     2 import java.util.Scanner;
     3 
     4 public class Main {
     5 
     6     public static boolean match(int[] cnt) {
     7         return cnt['h' - 'a'] == 2 && cnt['i' - 'a'] == 1 && cnt['o' - 'a'] == 1;
     8     }
     9 
    10     public static int resolve(String s) {
    11         int[] cnt = new int[26];
    12         int min = Integer.MAX_VALUE;
    13         for (int l = 0, r = 0; l < s.length(); l++) {
    14             while (r < s.length() && (cnt['h' - 'a'] < 2 || cnt['i' - 'a'] < 1 || cnt['o' - 'a'] < 1)) {
    15                 cnt[s.charAt(r) - 'a']++;
    16                 r++;
    17             }
    18 
    19             if (match(cnt)) {
    20                 min = Math.min(min, r - l);
    21             }
    22             cnt[s.charAt(l) - 'a']--;
    23         }
    24 
    25         return min == Integer.MAX_VALUE ? -1 : min;
    26     }
    27 
    28     public static void main(String[] args) {
    29         Scanner sc = new Scanner(System.in);
    30         String s = sc.nextLine();
    31         System.out.println(resolve(s));
    32     }
    33 }
  • 相关阅读:
    一次惨痛的debug的经历-RuntimeError: CUDA error: an illegal memory access was encountered
    Rank loss调研
    守护进程 supervisor
    PHP实现异步请求非阻塞
    PHP实现图片和文字水印(PHP给图片添加水印功能)
    虚拟机相关博客
    小师妹学JavaIO之:文件系统和WatchService
    后端 Java ActionEvent getModifiers()
    Java中常见的锁简述
    关键系统的JVM参数推荐
  • 原文地址:https://www.cnblogs.com/deadend/p/6665371.html
Copyright © 2011-2022 走看看