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

    很容易看出来是尺取法。 需要注意必须是恰好包含...., 比赛时没看清楚WA了几次。

    #include<bits/stdc++.h>
    
    using namespace std;
    
    string str;
    
    int solve(string &str)
    {
        unordered_map<char, int> mp;
        int ans = str.size();
        int b = 0, e = 0;
        bool is = false;
        while(true)
        {
            while(e < str.size() && (mp['h'] >= 2 && mp['i'] && mp['o']) == false)
                mp[str[e++]] ++;
    
            if(e == str.size())
                break;
    
            while(b < e && mp['h'] >= 2 && mp['i'] && mp['o'])
            {
                mp[str[b++]] --;
                if(mp['h'] == 2 && mp['i'] == 1 && mp['o'] == 1)
                {
                    is = true;
                    ans = min(ans, e-b);
                    break;
                }
            }
        }
        if(mp['h'] > 1 && mp['i'] && mp['o'])
        {
            while(b < e && mp['h'] > 1 && mp['i'] && mp['o'])
            {
                mp[str[b++]] --;
                if(mp['h'] == 2 && mp['i'] == 1 && mp['o'] == 1)
                {
                    is = true;
                    ans = min(ans, e-b);
                    break;
                }
            }
        }
        if(is)
            return ans;
        else
            return -1;
    }
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin >> str;
        cout << solve(str) << endl;
        return 0;
    }
    
    
  • 相关阅读:
    第七次作业
    rfid工作原理
    实验九——基本数据类型存储及应用总结
    实验八——函数定义及调用总结
    实验七——函数定义及调用总结
    作业
    作业
    作业
    开始
    实验12——指针的基础应用2
  • 原文地址:https://www.cnblogs.com/aiterator/p/6623250.html
Copyright © 2011-2022 走看看