AcWing 778. 字符串最大跨距

gao79138 / 2023-05-10 / 原文

AcWing 778. 字符串最大跨距


1. 地址

https://www.acwing.com/problem/content/description/780/

2. 题解

#include <iostream>
#include <cstdio>

using namespace std;

//从左往右找
int find_str_left(string s,string s1){
    for(int i=0;i + s1.size()<=s.size();i++){
        int j;
        for(j=0;j<s1.size();j++){
            if(s[i+j] != s1[j]){
                break;
            }
        }
        if(j == s1.size()){
            return i;
        }
    }
    return -1;
}
//从右往左找
int find_str_right(string s,string s2){
    for(int i=s.size()-1;((i+1)-s2.size())>=0;i--){
        int j;
        for(j=0;j<s2.size();j++){
            if(s[i-j] != s2[(s2.size()-1)-j]){
                break;
            }
        }
        if(j == s2.size()){
            return i - (s2.size()-1);
        }
    }
    return -1;
}

int main(){
    string s[3] = {"","",""};
    int cur = 0;
    char c;
    while(cin >> c){
        if(c == ','){
            cur++;
            continue;
        }
        s[cur] += c;
    }
    int s1_pos = find_str_left(s[0],s[1]);
    int s2_pos = find_str_right(s[0],s[2]);
    if(s1_pos == -1 || s2_pos == -1){
        puts("-1");
    }else if(s1_pos - s2_pos >= 0){
        puts("-1");
    }else if(s2_pos >= s1_pos && s2_pos <= s1_pos+s[1].size()-1){
        puts("-1");   
    }else{
        int result = s2_pos - (s1_pos+s[1].size());
        cout << result << endl;
    }
    return 0;
}