简化题意:求最长公共子串,直接暴力即可.枚举第一个字符串的所有子串,然后再find第二个字符串即可。
Python代码
a = input()
b = input()
n = len(a)
ans = 0
for i in range(n):
    for j in range(i , n):
        c = a[i:j + 1]
        if b.find(c) != -1:
            ans = max(ans , j - i + 1)
print(ans * 2)
C++代码
#include <iostream>
using namespace std;
int main()
{
    string a,b;
    cin>>a>>b;
    int ans=0;
    int n=a.size();
    for (int i=0;i<n;i++){
        for (int j=i;j<n;j++){
            string tmp=a.substr(i,j-i+1);
            if (b.find(tmp,0)!=string::npos)
                ans=max(ans,j-i+1);
        }
    }
    cout<<ans*2<<endl;
}
Java代码
import java.util.Scanner;
class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String a, b;
        a = scanner.next();
        b = scanner.next();
        int ans = 0;
        for (int i = 0; i < a.length(); i++) {
            for (int j = i; j < a.length(); j++) {
                String tmp = a.substring(i, j + 1);
                if (b.indexOf(tmp) != -1)
                    ans = Math.max(ans, j - i + 1);
            }
        }
        System.out.println(ans * 2);
    }
}
Js代码
process.stdin.resume();
process.stdin.setEncoding('utf-8');
let input = '';
process.stdin.on('data', (data) => {
	input += data;
	return;
});
process.stdin.on('end', () => {
    input=input.split('\n');
    var a=input[0];
    var b=input[1];
    var ans=0;
    var n=a.length;
    for (let i=0;i<n;i++){
        for (let j=i;j<n;j++){
            var tmp=a.substring(i,j+1);
            if (b.indexOf(tmp)!=-1)
                ans=Math.max(ans,j-i+1);
        }
    }
    console.log(ans*2);
})
        小红和兔子哥两兄弟被分配到不同的赛道,分别为赛道 X 和赛道 Y
两兄弟俩想问问,他们加起来最多可获得多少份奖金?
为了方便对比,官方对奖金进行了编号。
第一行为字符串,每个字符代表赛道 X 下每个关卡提供的礼物编号
第二行为字符串,每个字符代表赛道 Y 下每个关卡提供的礼物编号
礼物的编号范围为字母 a ~ z 和数字 0 ~ 9, 赛道关卡数为 1 ~ 100 范围内的整数
获得的奖金数
输入:
1323467
1378694
输出:
4
说明:
如果小红在赛道 X 中获得奖金 1 和 6 ,兔子哥在赛道 Y 中获得奖金 1 和 6 ,因为获得礼物不是连续的关卡,所以兄弟俩只能获得 2 份奖金。
如果小红在赛道 X 中获得奖金 1 和 3 ,兔子哥在赛道 Y 中获得奖金1和 3 ,由于 1 和 3 关卡是连续的,因此兄弟俩共可以获得 4 份奖金。