■ 题目描述
【字符串比较】
给定字符串A、B和正整数V,A的长度与B的长度相等, 请计算A中满足如下条件的最大连续子串的长度:
1、该连续子串在A和B中的位置和长度均相同。
2、该连续子串|A[i] – B[i]|之和小于等于V。其中|A[i] – B[i]|表示两个字母ASCII码之差的绝对值。
输入描述:
● 输入为三行:
● 第一行为字符串A,仅包含小写字符,1 <= A.length <=1000。
● 第二行为字符串B,仅包含小写字符,1 <= B.length <=1000。
● 第三行为正整数V,0<= V <= 10000。
输出描述:
● 字符串最大连续子串的长度,要求该子串|A[i] – B[i]|之和小于等于V。
示例 1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
xxcdefg
cdefghi
5
输出
2
字符串A为xxcdefg,字符串B为cdefghi,V=5。
它的最大连续子串可以是cd->ef,de->fg,ef->gh,fg->hi,所以最大连续子串是2。
public class CompareString {
public int getLength(String A, String B, int V){
char[] Aarr = A.toCharArray();
char[] Barr = B.toCharArray();
int sum = 0, len = 0;
for (int i=0;i<Aarr.length;i++){
sum+=Math.abs(Aarr[i]-Barr[i]);
if (sum<=V){
len++;
}else {
sum = 0;
if (len>0){
break;
}
}
}
System.out.println(len);
return len;
}
public int getLength2(String A, String B, int v){
char[] As = A.toCharArray();
char[] Bs = B.toCharArray();
int first = 0;
int len = 0;
int cha = 0;
for (int i = 0; i < As.length - 1; i++) {
int tempLast = 0;
if (As[i + 1] == As[i] + 1) {
tempLast = i + 1;
} else {
first = i + 1;
continue;
}
for (int j = first; j <= tempLast - 1; j++) {
if (Bs[j + 1] != Bs[j] + 1) {
cha = 0;
break;
}
if (j == first) {
cha += Math.abs(As[j] - Bs[j]);
}
cha += Math.abs(As[j + 1] - Bs[j + 1]);
}
int tempLen = tempLast - first + 1;
if (cha <= v && tempLen > len) {
len = tempLen;
cha = 0;
}
}
System.out.println(len);
return len;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String A = sc.nextLine();
String B = sc.nextLine();
int V = sc.nextInt();
int len1 = new CompareString().getLength(A,B,V);
System.out.println("len1:"+len1);
int len2 = new CompareString().getLength2(A,B,V);
System.out.println("len2:"+len2);
}
}