<script>
function
isPalindrome(freq, k)
{
let flag = 0;
let length = 0;
for
(let i = 0; i < 26; i++)
{
if
(freq[i] == 0)
continue
;
else
if
(freq[i] == 1)
flag = 1;
else
{
if
(freq[i] % 2 == 1)
flag = 1;
length += parseInt(freq[i] / 2, 10);
}
}
if
(k % 2 == 1)
{
if
(2 * length + flag >= k)
return
true
;
}
else
{
if
(2 * length >= k)
return
true
;
}
return
false
;
}
function
check(str, m, k)
{
let freq =
new
Array(26);
freq.fill(0);
for
(let i = 0; i < m; i++)
freq[str[i].charCodeAt() -
'a'
.charCodeAt()]++;
if
(isPalindrome(freq, k))
return
true
;
for
(let i = m; i < str.length; i++)
{
freq[str[i - m].charCodeAt() -
'a'
.charCodeAt()]--;
freq[str[i].charCodeAt() -
'a'
.charCodeAt()]++;
if
(isPalindrome(freq, k))
return
true
;
}
return
false
;
}
function
find(str, n, k)
{
let l = k;
let h = n;
let ans = -1;
while
(l <= h)
{
let m = parseInt((l + h) / 2, 10);
if
(check(str, m, k))
{
ans = m;
h = m - 1;
}
else
l = m + 1;
}
return
ans;
}
let str =
"abcda"
;
let n = str.length;
let k = 2;
document.write(find(str, n, k));
</script>