using
System;
using
System.Collections.Generic;
public
class
MaxXORCommonSubstring {
public
static
int
max_xor_common_substring(
string
s1,
string
s2)
{
var
n1 = s1.Length;
var
n2 = s2.Length;
var
max_xor = 0;
var
set
=
new
HashSet<
int
>();
for
(
int
len = 1; len <= n1; len++) {
set
.Clear();
var
hash_val = 0;
for
(
int
i = 0; i < len; i++) {
hash_val = (hash_val << 1)
+ ((
int
)(s1[i]) - (
int
)(
'0'
));
}
set
.Add(hash_val);
for
(
int
i = len; i < n1; i++) {
hash_val = ((hash_val << 1)
+ ((
int
)(s1[i]) - (
int
)(
'0'
)))
& ((1 << len) - 1);
set
.Add(hash_val);
}
hash_val = 0;
for
(
int
i = 0; i < len; i++) {
hash_val = (hash_val << 1)
+ ((
int
)(s2[i]) - (
int
)(
'0'
));
}
if
(
set
.Contains(hash_val)) {
max_xor = len;
}
for
(
int
i = len; i < n2; i++) {
hash_val = ((hash_val << 1)
+ ((
int
)(s2[i]) - (
int
)(
'0'
)))
& ((1 << len) - 1);
if
(
set
.Contains(hash_val)) {
max_xor = len;
}
}
}
return
max_xor;
}
public
static
void
Main(
string
[] args)
{
var
s1 =
"79567"
;
var
s2 =
"56779"
;
var
max_xor = MaxXORCommonSubstring
.max_xor_common_substring(s1, s2);
Console.WriteLine(max_xor);
s1 =
"123456"
;
s2 =
"8762347"
;
max_xor = MaxXORCommonSubstring
.max_xor_common_substring(s1, s2);
Console.WriteLine(max_xor);
}
}