zoukankan      html  css  js  c++  java
  • UVA902 【Password Search】

    题目大意:给出一个整数(n(0<nleq10))和一个字符串,求出现次数最多的长度为(n)的子串。

    我们分析一下这道题的算法:(hash,~AC)自动机(.)

    此外,某机房大佬说(SAM)也可搞。

    但蒟蒻窝实在是太菜了(……)以上算法基本都不会,所以我们采用(map)映射来记录每个子串出现的次数,最后直接一遍扫过去更新答案即可。

    此外要注意当(n)大于字符串长度时,不需要映射。

    code:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <map>
    
    using namespace std;
    
    map<string, int>rhs; 
    map<string, int>::iterator it; // 定义迭代器,后面扫的时候要用到。
    
    int n;
    string s, temp, ans; // s为题目给出的字符串,temp储存子串,ans储存答案
    
    int main()
    {
        while (cin >> n >> s) {
            int len = s.length();
            if (n < len) { // 特判
                for (int i = 0; i <= len - n; i++) {
                    temp = s.substr(i, n); // 使用substr函数直接取出从i开始长度为n的子串
                    rhs[temp]++;
                }
            }
            int MAX = 0;
            for (it = rhs.begin(); it != rhs.end(); it++) {
                if (it -> second > MAX) { // it -> second 即 it 所指位置的子串出现的次数
                    ans = it -> first; // it -> first 即 it 所指位置的子串
                    MAX = it -> second; // 更新最大次数
                }
            }
            cout << ans << '
    ';
            rhs.clear(); // 多测一定要记得清空!!
        }
        return 0;
    }
    
    
  • 相关阅读:
    高数基础知识整理12.微分方程
    x(1-x)及其更高次在区间[0,1]上的积分值
    PHP中的http协议
    php简单实现MVC
    如何用jQuery获得select的值
    面向对象思想介绍
    MySQL 日期和时间戳的转换 | 以及DATE_FORMAT()用法
    js将时间转换为时间戳
    PHP中sql语句如何使用变量
    四种简单的sql语句(增删改查语句)
  • 原文地址:https://www.cnblogs.com/Hydrogen-Helium/p/11738047.html
Copyright © 2011-2022 走看看