关联子串

标题:关联子串 | 时间限制:1秒 | 内存限制:262144K |
给定两个字符串str1和str2,如果字符串str1中的字符,经过排列组合后的字符串中,只要有一个字符串是str2的子串,则认为str1是str2的关联子串。
若str1是str2的关联子串,请返回子串在str2的起始位置;
若不是关联子串,则返回-1。

#include <iostream>
#include <algorithm>
using namespace std;

int getFirstStr1InStrIndex(string str1, string str2)
{
    int result=-1;
    int len1 = str1.size();
    int len2 = str2.size();
    if(len1 > len2) return -1;
    for(int i=0;i<len2-len1+1;i++)
    {
        string cur = str2.substr(i,len1);
        sort(cur.begin(),cur.end());
        if(cur == str1) return i;
    }
    return result;
}

int main()
{
    string str1,str2;
    cin>>str1>>str2;
    sort(str1.begin(),str1.end());
    int result = getFirstStr1InStrIndex(str1,str2);
    cout<<result;
    return 0;
}
s,t=input().split()
now = [0]*26
for c in s:
    now[ord(c)-97]+=1
cnt = [[0]*26 for _ in range(len(t)+1)]
for i in range(1,len(t)+1):
    for j in range(26):
        cnt[i][j] = cnt[i-1][j]
    cnt[i][ord(t[i-1])-97]+=1
ans = -1
for i in range(len(t)-len(s)+1):
    flag =True
    for j in range(26):
        if cnt[i+len(s)][j]-cnt[i][j] != now[j]:
            flag = False
    if flag:
        ans = i
        break
print(ans) //manfen



全部评论

相关推荐

03-03 10:35
3d人士会梦见住进比弗利山庄吗:这四个项目属于是初学者的玩具了。不知道面试官咋问,而且双非本搞算法除了9,还是保守至少c9
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客企业服务