zoukankan      html  css  js  c++  java
  • HNUSTOJ-1543 字符串的运算再现

    1543: 字符串的运算再现

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 34  解决: 7
    [提交][状态][讨论版]

    题目描述

    我们对字符串 S 做了以下定义:
    1. S ^ k表示由k个字符串S构成的新字符串。 例如, S = "abc", k = 3, 则S ^ k  =  "abcabcabc"
    2. Subsequence(S) 表示由字符串S的所有非空子序列构成的字符串集合。例如, S = "abc", 则Subsequence(S) = {"a", "b", "c", "ab", "ac", "bc", "abc"}
    现在, 给你2个字符串S和T, 希望你能找到最小的k, 满足T ∈Subsequence(S ^ k)

    输入

    输入只有2行, 分别为字符串S和T (1 <= |S|, |T| <= 100,000), 输入保证字符串S和T只由小写字母构成。

    输出

    输出最小的k, 满足T ∈Subsequence(S ^ k), 若不存在这样的k, 则输出-1

    样例输入

    abc
    abacbc
    

    样例输出

    3
    #pragma GCC diagnostic error "-std=c++11"
    #include <bits/stdc++.h>
    #define _ ios_base::sync_with_stdio(0);cin.tie(0);
    #include <typeinfo>
    
    
    using namespace std;
    const int N =  100000 + 5;
    
    char s[N], t[N];
    
    
    void Init(int * a, int n){ for(int i = 0; i < n; i++) a[i] = 0;}
    int Work(){
        int lens = strlen(s), lent = strlen(t);
        set<int> next[26];
        int vis[26]; Init(vis, 26);
        for(int i = 0 ; i < lens; i++)
            vis[s[i] - 'a'] = 1, next[s[i]-'a'].insert(i);
    
        for(int i = 0; i < lent; i++) if(!vis[t[i]-'a']) return -1;
    
        int cur = 0, k = 1;
    
        set<int>::iterator it;
    
        for(int i = 0; i < lent; i++){
            int p = t[i] - 'a';
            if((it = next[p].lower_bound(cur)) != next[p].end()) cur = (*it) + 1;
            else cur = 0, k++, i--;
        }
        return k;
    }
    int main(){ _
        while(cin >> s >> t){
            cout << Work() << endl;
        }
    }
  • 相关阅读:
    Struts2 动态方法调用
    Struts2 NameSpace空间的使用
    Struts2基本结构
    Android TextView Button按钮 属性
    【转】vue 手动挂载$mount() 获取 $el
    【转】逻辑架构和物理架构
    EntityFramework Code First 构建外键关系,数据库不生成外键约束
    HTML Document 头
    CSS 浏览器兼容
    PageMethods
  • 原文地址:https://www.cnblogs.com/Pretty9/p/7424087.html
Copyright © 2011-2022 走看看