思路:模拟
由于题目说只能改一次,所以我们可以很暴力的去解决这个问题:枚举改的这一次到底使用在哪?
我们要使用修改机会,只会在这两种情况下:
1.修改使得最长公共后缀更大
2.修改使得最长公共前缀更大
题目内容
对于两个字符串 A 和 B,定义 P(A,B) 为 A 与 B 的最长公共前缀的长度,S(A,B) 为 A 与 B 的最长公共后缀的长度。定义相似度 M(A,B)=P(A,B)×S(A,B)。
你可以对字符串 A 进行至多一次修改:将 A 中的任意一个字符替换成另一个小写字母。求在所有可能的修改下,相似度 M(A,B) 可能达到的最大值。
字符串 A 和 B 的长度均满足 1≤∣A∣,∣B∣≤105,且仅包含小写字母。
输入描述
第一行包含一个仅由小写字母组成的字符串 A(1≤∣A∣≤105)。
第二行包含一个仅由小写字母组成的字符串 B(1≤∣B∣≤105)。
输出描述
输出一个整数,表示能够达到的最大相似度。
样例1
输入
a
b
输出
1
说明
初始时,字符串 A 与 B 的最长公共前缀长度为 0(因为 a eq b),最长公共后缀长度也为 0,相似度 M(A,B)=0×0=0。
将 A 中的 a 修改为 b,得到 A′= b,此时 A′ 与 B 完全相同,最长公共前缀长度变为 1,最长公共后缀长度变为 1,相似度达到 1×1=1。因此最大相似度为 1。
样例2
输入
axbyc
azbwc
输出
3
说明
初始时,A 与 B 的最长公共前缀为 a,长度 P=1;最长公共后缀为 c,长度 S=1,相似度为 1×1=1。
有两种修改方式:
- 修改前缀冲突位置:将 A 中第一个不匹配字符
x 改为 z,得到 A′= azbyc。此时 A′ 与 B 的前 3 个字符 a, z, b 均匹配,P=3;后缀仍为 c,S=1,相似度为 3×1=3。
- 修改后缀冲突位置:将 A 中最后一个不匹配字符
y 改为 w,得到 A′= axbwc。此时前缀为 a,P=1;后缀 c, b, w 均匹配,S=3,相似度为 1×3=3。
综上,最大相似度为 3。
样例3
输入
hello
hello
输出
25
说明
A 与 B 完全相同,最长公共前缀长度为 5,最长公共后缀长度也为 5,相似度为 5×5=25。
由于可以不进行修改,且任何修改都会破坏当前的完全匹配,因此最大相似度即为 25。