其他分享
首页 > 其他分享> > [AcWing 778] 字符串最大跨距

[AcWing 778] 字符串最大跨距

作者:互联网

image


点击查看代码
#include<iostream>

using namespace std;

string s, s1, s2;
int main()
{
    char c;
    while (cin >> c, c != ',')  s += c;
    while (cin >> c, c != ',')  s1 += c;
    cin >> s2;
    if (s.size() < s1.size() || s.size() < s2.size())   puts("-1");
    else {
        int l = 0;
        while (l + s1.size() <= s.size()) {
            int k = 0;
            for ( ; k < s1.size(); k ++) {
                if (s[l + k] != s1[k])  break;
            }
            if (k == s1.size()) break;
            l ++;
        }
        int r = s.size() - s2.size();
        while (r >= 0) {
            int k = 0;
            for ( ; k < s2.size(); k ++) {
                if (s[r + k] != s2[k])  break;
            }
            if (k == s2.size()) break;
            r --;
        }
        l += s1.size() - 1;
        if (l >= r) puts("-1");
        else    printf("%d\n", r - l - 1);
    }
    return 0;
}

  1. 不使用 find() 函数的情况下,匹配 s1 和 s2 需要用 l 和 r 枚举 s1 和 s2 起点的可能性,找到 s1 和 s2 的起点在 s 中的位置
  2. 枚举 s1 的起点 l 时,从 0 开始向后枚举,枚举 s2 的起点 r 时,从 s.size() - s2.size() 开始向前枚举
  3. 边界情况1:s 的长度比 s1 的长度或者 s2 的长度小,输出 "-1"
  4. 边界情况2:s1 的终点位置 l ( l += s1.size() - 1 把 l 移到了 s1 的终点位置 ) 大于等于 s2 的起点位置 r

标签:跨距,int,s2,s1,778,枚举,AcWing,起点,size
来源: https://www.cnblogs.com/wKingYu/p/16145816.html