zoukankan      html  css  js  c++  java
  • Nowcoder9983F.匹配串(思维)

    链接:https://ac.nowcoder.com/acm/contest/9983/F
    来源:牛客网

    一个模式串指仅包含小写英文字母和至少一个'#'的字符串,其中'#'可以匹配一段任意长度的任意小写字母字符串。
    一个匹配串指待匹配的只包含小写字母的字符串。
    一个模式串和一个匹配串相匹配当且仅当把模式串里面的'#'全部分别替换成空或一段小写字母字符串后,两个串完全相同。
    现在给出nmathit nn个模式串,问有多少不同的匹配串与这些模式串全部相匹配。
    如果答案有无穷多个,输出-1 ext -1-1。

    只可能输出0或-1

    //每个字符串被#分割成若干个字符串 
    //如果是#..#..#,那么第一个 
    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e6+100;
    string s[maxn];
    string f1,f2;
    int main () {
        int f=1;
        int n;
        scanf("%d",&n);
        for (int i=1;i<=n;i++) cin>>s[i];
        for (int i=1;i<=n;i++) {
            int j;
            for (j=0;j<s[i].size();j++) if (s[i][j]=='#') break;
            string t1=s[i].substr(0,j);
            //st1.insert(s.substr(0,j));
            for (j=s[i].size()-1;j>=0;j--) if (s[i][j]=='#') break;
            //st2.insert(s.substr(j+1,s[i].size()-j-1));
            string t2="";
            if (j!=s[i].size()-1) t2=s[i].substr(j+1,s[i].size()-j-1);
            //cout<<t1<<" "<<t2<<'
    ';
            for (int j=0;j<min(t1.size(),f1.size());j++) if (t1[j]!=f1[j]) {
                f=0;
                break;
            } 
            for (int j=0;j<min(t2.size(),f2.size());j++) if (t2[t2.size()-1-j]!=f2[f2.size()-1-j]) {
                f=0;
                break;
            }
            if (!f) break;
            if (t1.size()>f1.size()) f1=t1;
            if (t2.size()>f2.size()) f2=t2;
        }
        if (f)
            printf("-1
    ");
        else
            printf("0
    ");
        
    } 
     
  • 相关阅读:
    check事件
    JAVA----泛型
    JAVA集合的遍历for循环、Iterator迭代器
    JAVA 集合的定义分类
    JAVA面向对象---方法的重写与重载
    JAVA 面向对象---继承
    JAVA 面向对象
    JAVA ArrayList集合
    JAVA基础测试
    JAVA中 引用数据类型(类)
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/14381182.html
Copyright © 2011-2022 走看看