京东第一题,求相似字符串个数,有大佬ac的吗

京东第一题,求相似字符串,有大佬ac的吗,附60%ac的代码
input:ababcb
xyx
output:3

'''
input:ababcb
xyx
output:3
'''
import sys
import os
import re
def KMP(S):
    m = len(S)
    N = [0 for i in range(m)]
    for i in range(1,m):
        k = N[i-1]
        while(k>0 and S[i]!=S[k]):
            k = N[k-1]
        if(S[i]==S[k]):
            N[i]=k+1
        else:
            N[i]=0
    return N
if __name__ == '__main__':
    S = sys.stdin.readline().strip()
    T = sys.stdin.readline().strip()
    len1 = len(S)
    len2 = len(T)
    TN = KMP(T)
    count = 0
    if(len1<len2):
        print(0)
        sys.exit()
    for i in range(len1):
        tmp = S[i:i+len2]
        tmpN = KMP(tmp)
        if(len(tmp)<len2):
            break
        elif(tmpN==TN):
            count+=1
    print(count)

#京东#
全部评论
a了75%,哎
点赞 回复 分享
发布于 2018-09-09 21:14
只过了83.。。。
点赞 回复 分享
发布于 2018-09-09 21:15
爆破75%,没法了
点赞 回复 分享
发布于 2018-09-09 21:18
mark,坐等ac代码
点赞 回复 分享
发布于 2018-09-09 21:19
83
点赞 回复 分享
发布于 2018-09-09 21:20
def Similar(s,t,n):     flag=True     dic={}     for i in range(n):         if s[i] in dic.keys():             if dic[s[i]]==t[i]:                 continue             else:                 flag=False                 break         elif t[i] in dic.values():             flag=False             break         else:             dic[s[i]]=t[i]     return flag s,t=input(),input() m,n=len(s),len(t) count=0 for i in range(m-n+1):     substr=s[i:i+n]     if Similar(substr,t,n):         count+=1 print(count) ac 83%
点赞 回复 分享
发布于 2018-09-09 21:25
也是83 #include <iostream> #include <vector> #include <map> using namespace std; int solve(string S,string T) {     int num=0;          for(int i=0;i<=int(S.size()-T.size());i++)     {         map<char,char> m1;         map<char,char> m2;                  auto tmp=S.substr(i,T.size());         bool flag=true;         for(int j=0;j<T.size();j++)         {             if(m1.count(tmp[j]))             {                 if(m1[tmp[j]]!=T[j])                 {                     flag=false;                     break;                 }             }             else             {                 if(m2.count(T[j]))                 {                     if(m2[T[j]]!=tmp[j])                     {                         flag=false;                         break;                     }                 }                 else                 {                     m1[tmp[j]]=T[j];                     m2[T[j]]=tmp[j];                 }             }         }         if(flag)         {             num++;         }     }     return num; } int main() {     int res;     string _S;     getline(cin,_S);     string _T;     getline(cin,_T);          res=solve(_S,_T);     cout<<res<<endl;          return 0;      }
点赞 回复 分享
发布于 2018-09-09 21:29
同 python 75%,有 python AC 的吗?尤其 KMP 怎么设计转移函数?
点赞 回复 分享
发布于 2018-09-09 23:41

相关推荐

不愿透露姓名的神秘牛友
11-21 19:05
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务