今天做最大的连续公共子串问题想到的
举个例子:子串是acbac,母串是acaccbabb
主要的思想是按位异或,连续的0就是连续的公共子串,记录最长出现的0:
以此类推,每次异或记录如果是0长度就加一并且记录最大长度,不是0就将长度清零。大概思想就是这样
代码如下
public class Main {
public static void main(String[] args) {
//子串
String query = "acbac";
//母串
String text = "acaccbabb";
//母串数组
char t[] = new char[2*query.length() + text.length() - 2];
for(int i = query.length() - 1, j = 0; j < text.length(); j++, i++) {
t[i] = text.toCharArray()[j];
}
//子串数组
char q[] = query.toCharArray();
//异或结果数组
int temp = 0;
int max = 0;
//按位异或
for(int i = 0; i < t.length - query.length() + 1; i++) {
int length = 0;
for(int j = 0, k = i; j < query.length(); j++, k++) {
temp = q[j] ^ t[k];
if(temp == 0) {
length ++;//长度加一
if(length > max)//记录最大长度
max = length;
} else {
length = 0;//清零
}
}
}
System.out.println(max);
}
}