zoukankan      html  css  js  c++  java
  • C. Maximum width(贪心)

    题意:输入n,m,再输入长度为n的字符串s和长度为m的字符串t,从字符串s里找出子序列p,要求spi和ti相同(最终达到子序列和t相同)。求
    pi+1pi的最大值。(上一个字符和下一个字符的最大间隔)

    题解:要最大间隔,就去找上一个字符最先出现的位置,和后一个字符最后出现的位置,即得最大值,再在众多间隔值中取出最大值就行了。

    ACcode:

    ll n, m, ans;
    ll pos1[200100],pos2[200100];//数组太大建议放外面
    int main()
    {
    memset(pos1, 0, sizeof(pos1));
    memset(pos2, 0, sizeof(pos2));//没有循环可以省略
    string a, b;
    cin >> n >> m;
    cin >> a >> b;
    for (ll i = 0,j=0; j < m&&i<n; i++)
    {
    if (a[i] == b[j])
    {
    pos1[j] = i;
    j++;
    }//从前往后标记,最小值
    }
    for (ll j= m-1,i=n-1; j >0&&i>0; i--)
    {
    if (a[i] == b[j])
    {
    pos2[j] = i;
    j--;
    }//从后往前标记,最大值
    }
    ans = -1;
    for (ll i = 0; i < m-1; i++)
    ans = max(ans, pos2[i+1] - pos1[i]);//按题目要求得最大值
    cout << ans;
    return 0;
    }

     

  • 相关阅读:
    第14周总结
    第十三周总结
    第十二周总结
    第十一周总结
    第十次助教小结
    第九次小结-关注的助教
    第八次点评
    助教总结
    助教小结13
    助教小结12
  • 原文地址:https://www.cnblogs.com/Uiney117/p/14531447.html
Copyright © 2011-2022 走看看