1 条题解

  • 0
    @ 2022-08-14 17:08:45

    同构字符串(文件I/O)

    和上面的一样,满足同构串,一定是 长度必须相等,字母出现的次数一样,也满足 一致性。最后暴力找一遍即可。
    cpp
    #include <cstdio>
    #include <cstring>
    #include <string>
    #include <iostream>
    using namespace std;
    const int M=26, N1=5000005, N2=1005;
    int a[M], b[M];
    char t[N1], s[N2];
    bool chk(int a[], int b[]){
    for (int i=0; i<M; i++)
    if (a[i]!=b[i]) return false;
    return true;
    }
    int main(){
    freopen("same.in", "r", stdin);
    freopen("same.out", "w", stdout);
    ios::sync_with_stdio(false);
    string s, t;
    cin>>s>>t;
    //scanf("%s", s.c_str());
    //scanf("%s", t.c_str());
    //scanf("%s", s); //子串
    //scanf("%s", t); //父串
    //int len=strlen(s); //设子串长度为len
    int len=s.size() , len2=t.size() ;
    for (int i=0; i<len; i++)
    a[s[i]-'a']++; //将子串中每个字符出现的次数用桶记录
    for (int i=0; i<len; i++)
    b[t[i]-'a']++; //将父串中前len个字符出现的次数用桶记录
    int ans=chk(a, b);//, len2=strlen(t); //先比较一次
    for (int i=len; i<len2; i++){
    b[t[i-len]-'a']--;//把前一个字符减去
    b[t[i]-'a']++; //加上下一个字符
    ans+=chk(a, b);
    }
    printf("%d\n", ans);
    return 0;
    }

  • 1

同构字符串(文件IO)

信息

ID
1498
难度
6
分类
字符串 点击显示
标签
递交数
17
已通过
3
通过率
18%
上传者