John takes computer security very seriously, so he has picked a very long password to secure his files. However, although the password is very strong, it is also hard to memorize.
John decides to create a new password which is easier to remember. Therefore, it must fulfill certain requirements: he wants each character (digit or letter) to appear in the new password an even number of times (possibly zero). Also, since he is so proud of his original password, he wants the new password to be a contiguous substring of the original password.
John has trouble finding such a substring. Help him by finding, for a given string, the length of the longest substring that fulfills the requirements set out above.
Write a function:
class Solution { public int solution(string S); }
that, given a non-empty string S consisting of N characters, returns the length of the longest contiguous substring (possibly empty) of string S in which every character occurs an even number of times.
For example, given S = "6daa6ccaaa6d", the function should return 8. The longest valid password taken from S is "a6ccaaa6"; it contains four letters a, and two each of the digit 6 and letter c. Any longer substring must contain either five letters a or one letter d. Given S = "abca", the function should return 0 (note that aa is not a contiguous substring of S).
Write an efficient algorithm for the following assumptions:
- the length of string S is within the range [1..100,000];
- S consists only of lowercase letters and digits.
using System;
// you can also use other imports, for example:
// using System.Collections.Generic;
// you can write to stdout for debugging purposes, e.g.
// Console.WriteLine("this is a debug message");
class Solution {
public int solution(string S) {
// write your code in C# 6.0 with .NET 4.5 (Mono)
}
}
using System;
// you can also use other imports, for example:
// using System.Collections.Generic;
// you can write to stdout for debugging purposes, e.g.
// Console.WriteLine("this is a debug message");
class Solution {
public static class ElementsMask
{
static long aMask = 1;
static long bMask = (long)1 << 1;
static long cMask = (long)1 << 2;
static long dMask = (long)1 << 3;
static long eMask = (long)1 << 4;
static long fMask = (long)1 << 5;
static long gMask = (long)1 << 6;
static long hMask = (long)1 << 7;
static long iMask = (long)1 << 8;
static long jMask = (long)1 << 9;
static long kMask = (long)1 << 10;
static long lMask = (long)1 << 11;
static long mMask = (long)1 << 12;
static long nMask = (long)1 << 13;
static long oMask = (long)1 << 14;
static long pMask = (long)1 << 15;
static long qMask = (long)1 << 16;
static long rMask = (long)1 << 17;
static long sMask = (long)1 << 18;
static long tMask = (long)1 << 19;
static long uMask = (long)1 << 20;
static long vMask = (long)1 << 21;
static long wMask = (long)1 << 22;
static long xMask = (long)1 << 23;
static long yMask = (long)1 << 24;
static long zMask = (long)1 << 25;
static long n0Mask = (long)1 << 26;
static long n1Mask = (long)1 << 27;
static long n2Mask = (long)1 << 28;
static long n3Mask = (long)1 << 29;
static long n4Mask = (long)1 << 30;
static long n5Mask = (long)1 << 31;
static long n6Mask = (long)1 << 32;
static long n7Mask = (long)1 << 33;
static long n8Mask = (long)1 << 34;
static long n9Mask = (long)1 << 35;
public static long AppendMask(char c)
{
var binaryString = Convert.ToString(c, 2).PadLeft(8, '0');
switch(c)
{
case 'a':
binaryString = Convert.ToString(aMask, 2) + binaryString;
break;
case 'b':
binaryString = Convert.ToString(bMask, 2) + binaryString;
break;
case 'c':
binaryString = Convert.ToString(cMask, 2) + binaryString;
break;
case 'd':
binaryString = Convert.ToString(dMask, 2) + binaryString;
break;
case 'e':
binaryString = Convert.ToString(eMask, 2) + binaryString;
break;
case 'f':
binaryString = Convert.ToString(fMask, 2) + binaryString;
break;
case 'g':
binaryString = Convert.ToString(gMask, 2) + binaryString;
break;
case 'h':
binaryString = Convert.ToString(hMask, 2) + binaryString;
break;
case 'i':
binaryString = Convert.ToString(iMask, 2) + binaryString;
break;
case 'j':
binaryString = Convert.ToString(jMask, 2) + binaryString;
break;
case 'k':
binaryString = Convert.ToString(kMask, 2) + binaryString;
break;
case 'l':
binaryString = Convert.ToString(lMask, 2) + binaryString;
break;
case 'm':
binaryString = Convert.ToString(mMask, 2) + binaryString;
break;
case 'n':
binaryString = Convert.ToString(nMask, 2) + binaryString;
break;
case 'o':
binaryString = Convert.ToString(oMask, 2) + binaryString;
break;
case 'p':
binaryString = Convert.ToString(pMask, 2) + binaryString;
break;
case 'q':
binaryString = Convert.ToString(qMask, 2) + binaryString;
break;
case 'r':
binaryString = Convert.ToString(rMask, 2) + binaryString;
break;
case 's':
binaryString = Convert.ToString(sMask, 2) + binaryString;
break;
case 't':
binaryString = Convert.ToString(tMask, 2) + binaryString;
break;
case 'u':
binaryString = Convert.ToString(uMask, 2) + binaryString;
break;
case 'v':
binaryString = Convert.ToString(vMask, 2) + binaryString;
break;
case 'w':
binaryString = Convert.ToString(wMask, 2) + binaryString;
break;
case 'x':
binaryString = Convert.ToString(xMask, 2) + binaryString;
break;
case 'y':
binaryString = Convert.ToString(yMask, 2) + binaryString;
break;
case 'z':
binaryString = Convert.ToString(zMask, 2) + binaryString;
break;
case '0':
binaryString = Convert.ToString(n0Mask, 2) + binaryString;
break;
case '1':
binaryString = Convert.ToString(n1Mask, 2) + binaryString;
break;
case '2':
binaryString = Convert.ToString(n2Mask, 2) + binaryString;
break;
case '3':
binaryString = Convert.ToString(n3Mask, 2) + binaryString;
break;
case '4':
binaryString = Convert.ToString(n4Mask, 2) + binaryString;
break;
case '5':
binaryString = Convert.ToString(n5Mask, 2) + binaryString;
break;
case '6':
binaryString = Convert.ToString(n6Mask, 2) + binaryString;
break;
case '7':
binaryString = Convert.ToString(n7Mask, 2) + binaryString;
break;
case '8':
binaryString = Convert.ToString(n8Mask, 2) + binaryString;
break;
case '9':
binaryString = Convert.ToString(n9Mask, 2) + binaryString;
break;
}
return Convert.ToInt64(binaryString, 2);
}
}
public int solution(string S) {
// write your code in C# 6.0 with .NET 4.5 (Mono)
}
}
using System;
// you can also use other imports, for example:
using System.Collections.Generic;
// you can write to stdout for debugging purposes, e.g.
// Console.WriteLine("this is a debug message");
class Solution {
public static class ElementsMask
{
static long aMask = 1;
static long bMask = (long)1 << 1;
static long cMask = (long)1 << 2;
static long dMask = (long)1 << 3;
static long eMask = (long)1 << 4;
static long fMask = (long)1 << 5;
static long gMask = (long)1 << 6;
static long hMask = (long)1 << 7;
static long iMask = (long)1 << 8;
static long jMask = (long)1 << 9;
static long kMask = (long)1 << 10;
static long lMask = (long)1 << 11;
static long mMask = (long)1 << 12;
static long nMask = (long)1 << 13;
static long oMask = (long)1 << 14;
static long pMask = (long)1 << 15;
static long qMask = (long)1 << 16;
static long rMask = (long)1 << 17;
static long sMask = (long)1 << 18;
static long tMask = (long)1 << 19;
static long uMask = (long)1 << 20;
static long vMask = (long)1 << 21;
static long wMask = (long)1 << 22;
static long xMask = (long)1 << 23;
static long yMask = (long)1 << 24;
static long zMask = (long)1 << 25;
static long n0Mask = (long)1 << 26;
static long n1Mask = (long)1 << 27;
static long n2Mask = (long)1 << 28;
static long n3Mask = (long)1 << 29;
static long n4Mask = (long)1 << 30;
static long n5Mask = (long)1 << 31;
static long n6Mask = (long)1 << 32;
static long n7Mask = (long)1 << 33;
static long n8Mask = (long)1 << 34;
static long n9Mask = (long)1 << 35;
public static long AppendMask(char c)
{
var binaryString = Convert.ToString(c, 2).PadLeft(8, '0');
switch(c)
{
case 'a':
binaryString = Convert.ToString(aMask, 2) + binaryString;
break;
case 'b':
binaryString = Convert.ToString(bMask, 2) + binaryString;
break;
case 'c':
binaryString = Convert.ToString(cMask, 2) + binaryString;
break;
case 'd':
binaryString = Convert.ToString(dMask, 2) + binaryString;
break;
case 'e':
binaryString = Convert.ToString(eMask, 2) + binaryString;
break;
case 'f':
binaryString = Convert.ToString(fMask, 2) + binaryString;
break;
case 'g':
binaryString = Convert.ToString(gMask, 2) + binaryString;
break;
case 'h':
binaryString = Convert.ToString(hMask, 2) + binaryString;
break;
case 'i':
binaryString = Convert.ToString(iMask, 2) + binaryString;
break;
case 'j':
binaryString = Convert.ToString(jMask, 2) + binaryString;
break;
case 'k':
binaryString = Convert.ToString(kMask, 2) + binaryString;
break;
case 'l':
binaryString = Convert.ToString(lMask, 2) + binaryString;
break;
case 'm':
binaryString = Convert.ToString(mMask, 2) + binaryString;
break;
case 'n':
binaryString = Convert.ToString(nMask, 2) + binaryString;
break;
case 'o':
binaryString = Convert.ToString(oMask, 2) + binaryString;
break;
case 'p':
binaryString = Convert.ToString(pMask, 2) + binaryString;
break;
case 'q':
binaryString = Convert.ToString(qMask, 2) + binaryString;
break;
case 'r':
binaryString = Convert.ToString(rMask, 2) + binaryString;
break;
case 's':
binaryString = Convert.ToString(sMask, 2) + binaryString;
break;
case 't':
binaryString = Convert.ToString(tMask, 2) + binaryString;
break;
case 'u':
binaryString = Convert.ToString(uMask, 2) + binaryString;
break;
case 'v':
binaryString = Convert.ToString(vMask, 2) + binaryString;
break;
case 'w':
binaryString = Convert.ToString(wMask, 2) + binaryString;
break;
case 'x':
binaryString = Convert.ToString(xMask, 2) + binaryString;
break;
case 'y':
binaryString = Convert.ToString(yMask, 2) + binaryString;
break;
case 'z':
binaryString = Convert.ToString(zMask, 2) + binaryString;
break;
case '0':
binaryString = Convert.ToString(n0Mask, 2) + binaryString;
break;
case '1':
binaryString = Convert.ToString(n1Mask, 2) + binaryString;
break;
case '2':
binaryString = Convert.ToString(n2Mask, 2) + binaryString;
break;
case '3':
binaryString = Convert.ToString(n3Mask, 2) + binaryString;
break;
case '4':
binaryString = Convert.ToString(n4Mask, 2) + binaryString;
break;
case '5':
binaryString = Convert.ToString(n5Mask, 2) + binaryString;
break;
case '6':
binaryString = Convert.ToString(n6Mask, 2) + binaryString;
break;
case '7':
binaryString = Convert.ToString(n7Mask, 2) + binaryString;
break;
case '8':
binaryString = Convert.ToString(n8Mask, 2) + binaryString;
break;
case '9':
binaryString = Convert.ToString(n9Mask, 2) + binaryString;
break;
}
return Convert.ToInt64(binaryString, 2);
}
}
public int solution(string S) {
// write your code in C# 6.0 with .NET 4.5 (Mono)
}
}
using System;
// you can also use other imports, for example:
using System.Collections.Generic;
// you can write to stdout for debugging purposes, e.g.
// Console.WriteLine("this is a debug message");
class Solution {
public static class ElementsMask
{
static long aMask = 1;
static long bMask = (long)1 << 1;
static long cMask = (long)1 << 2;
static long dMask = (long)1 << 3;
static long eMask = (long)1 << 4;
static long fMask = (long)1 << 5;
static long gMask = (long)1 << 6;
static long hMask = (long)1 << 7;
static long iMask = (long)1 << 8;
static long jMask = (long)1 << 9;
static long kMask = (long)1 << 10;
static long lMask = (long)1 << 11;
static long mMask = (long)1 << 12;
static long nMask = (long)1 << 13;
static long oMask = (long)1 << 14;
static long pMask = (long)1 << 15;
static long qMask = (long)1 << 16;
static long rMask = (long)1 << 17;
static long sMask = (long)1 << 18;
static long tMask = (long)1 << 19;
static long uMask = (long)1 << 20;
static long vMask = (long)1 << 21;
static long wMask = (long)1 << 22;
static long xMask = (long)1 << 23;
static long yMask = (long)1 << 24;
static long zMask = (long)1 << 25;
static long n0Mask = (long)1 << 26;
static long n1Mask = (long)1 << 27;
static long n2Mask = (long)1 << 28;
static long n3Mask = (long)1 << 29;
static long n4Mask = (long)1 << 30;
static long n5Mask = (long)1 << 31;
static long n6Mask = (long)1 << 32;
static long n7Mask = (long)1 << 33;
static long n8Mask = (long)1 << 34;
static long n9Mask = (long)1 << 35;
public static long AppendMask(char c)
{
var binaryString = Convert.ToString(c, 2).PadLeft(8, '0');
switch(c)
{
case 'a':
binaryString = Convert.ToString(aMask, 2) + binaryString;
break;
case 'b':
binaryString = Convert.ToString(bMask, 2) + binaryString;
break;
case 'c':
binaryString = Convert.ToString(cMask, 2) + binaryString;
break;
case 'd':
binaryString = Convert.ToString(dMask, 2) + binaryString;
break;
case 'e':
binaryString = Convert.ToString(eMask, 2) + binaryString;
break;
case 'f':
binaryString = Convert.ToString(fMask, 2) + binaryString;
break;
case 'g':
binaryString = Convert.ToString(gMask, 2) + binaryString;
break;
case 'h':
binaryString = Convert.ToString(hMask, 2) + binaryString;
break;
case 'i':
binaryString = Convert.ToString(iMask, 2) + binaryString;
break;
case 'j':
binaryString = Convert.ToString(jMask, 2) + binaryString;
break;
case 'k':
binaryString = Convert.ToString(kMask, 2) + binaryString;
break;
case 'l':
binaryString = Convert.ToString(lMask, 2) + binaryString;
break;
case 'm':
binaryString = Convert.ToString(mMask, 2) + binaryString;
break;
case 'n':
binaryString = Convert.ToString(nMask, 2) + binaryString;
break;
case 'o':
binaryString = Convert.ToString(oMask, 2) + binaryString;
break;
case 'p':
binaryString = Convert.ToString(pMask, 2) + binaryString;
break;
case 'q':
binaryString = Convert.ToString(qMask, 2) + binaryString;
break;
case 'r':
binaryString = Convert.ToString(rMask, 2) + binaryString;
break;
case 's':
binaryString = Convert.ToString(sMask, 2) + binaryString;
break;
case 't':
binaryString = Convert.ToString(tMask, 2) + binaryString;
break;
case 'u':
binaryString = Convert.ToString(uMask, 2) + binaryString;
break;
case 'v':
binaryString = Convert.ToString(vMask, 2) + binaryString;
break;
case 'w':
binaryString = Convert.ToString(wMask, 2) + binaryString;
break;
case 'x':
binaryString = Convert.ToString(xMask, 2) + binaryString;
break;
case 'y':
binaryString = Convert.ToString(yMask, 2) + binaryString;
break;
case 'z':
binaryString = Convert.ToString(zMask, 2) + binaryString;
break;
case '0':
binaryString = Convert.ToString(n0Mask, 2) + binaryString;
break;
case '1':
binaryString = Convert.ToString(n1Mask, 2) + binaryString;
break;
case '2':
binaryString = Convert.ToString(n2Mask, 2) + binaryString;
break;
case '3':
binaryString = Convert.ToString(n3Mask, 2) + binaryString;
break;
case '4':
binaryString = Convert.ToString(n4Mask, 2) + binaryString;
break;
case '5':
binaryString = Convert.ToString(n5Mask, 2) + binaryString;
break;
case '6':
binaryString = Convert.ToString(n6Mask, 2) + binaryString;
break;
case '7':
binaryString = Convert.ToString(n7Mask, 2) + binaryString;
break;
case '8':
binaryString = Convert.ToString(n8Mask, 2) + binaryString;
break;
case '9':
binaryString = Convert.ToString(n9Mask, 2) + binaryString;
break;
}
return Convert.ToInt64(binaryString, 2);
}
}
public int solution(string S) {
var ret = 0;
long xorResult = 0;
// pair <xorResult, position>
var xorResultIndexes = new Dictionary<long, int>();
for (var i= 0; i < S.Length; i++)
{
xorResult = xorResult ^ ElementsMask.AppendMask(S[i]);
//var appendMask = ElementsMask.AppendMask(S[i]);
Console.WriteLine($"{Convert.ToString(ElementsMask.AppendMask(S[i]), 2).PadLeft(8, '0')} - {Convert.ToInt32(S[i])}");
if (xorResult == 0)
{
if (i+1 > ret)
{
ret = i + 1;
}
}
else if (!xorResultIndexes.ContainsKey(xorResult))
{
// first appearance of this negative total sum
xorResultIndexes.Add(xorResult, i);
}
else
{
if(i - xorResultIndexes[xorResult] > ret)
{
ret = i - xorResultIndexes[xorResult];
}
}
}
//https://app.codility.com/cert/view/certPSRNUM-VTEXMSJPV2F6S6FD/details/
return ret;
}
}
using System;
// you can also use other imports, for example:
using System.Collections.Generic;
// you can write to stdout for debugging purposes, e.g.
// Console.WriteLine("this is a debug message");
class Solution {
public static class ElementsMask
{
static long aMask = 1;
static long bMask = (long)1 << 1;
static long cMask = (long)1 << 2;
static long dMask = (long)1 << 3;
static long eMask = (long)1 << 4;
static long fMask = (long)1 << 5;
static long gMask = (long)1 << 6;
static long hMask = (long)1 << 7;
static long iMask = (long)1 << 8;
static long jMask = (long)1 << 9;
static long kMask = (long)1 << 10;
static long lMask = (long)1 << 11;
static long mMask = (long)1 << 12;
static long nMask = (long)1 << 13;
static long oMask = (long)1 << 14;
static long pMask = (long)1 << 15;
static long qMask = (long)1 << 16;
static long rMask = (long)1 << 17;
static long sMask = (long)1 << 18;
static long tMask = (long)1 << 19;
static long uMask = (long)1 << 20;
static long vMask = (long)1 << 21;
static long wMask = (long)1 << 22;
static long xMask = (long)1 << 23;
static long yMask = (long)1 << 24;
static long zMask = (long)1 << 25;
static long n0Mask = (long)1 << 26;
static long n1Mask = (long)1 << 27;
static long n2Mask = (long)1 << 28;
static long n3Mask = (long)1 << 29;
static long n4Mask = (long)1 << 30;
static long n5Mask = (long)1 << 31;
static long n6Mask = (long)1 << 32;
static long n7Mask = (long)1 << 33;
static long n8Mask = (long)1 << 34;
static long n9Mask = (long)1 << 35;
public static long AppendMask(char c)
{
var binaryString = Convert.ToString(c, 2).PadLeft(8, '0');
switch(c)
{
case 'a':
binaryString = Convert.ToString(aMask, 2) + binaryString;
break;
case 'b':
binaryString = Convert.ToString(bMask, 2) + binaryString;
break;
case 'c':
binaryString = Convert.ToString(cMask, 2) + binaryString;
break;
case 'd':
binaryString = Convert.ToString(dMask, 2) + binaryString;
break;
case 'e':
binaryString = Convert.ToString(eMask, 2) + binaryString;
break;
case 'f':
binaryString = Convert.ToString(fMask, 2) + binaryString;
break;
case 'g':
binaryString = Convert.ToString(gMask, 2) + binaryString;
break;
case 'h':
binaryString = Convert.ToString(hMask, 2) + binaryString;
break;
case 'i':
binaryString = Convert.ToString(iMask, 2) + binaryString;
break;
case 'j':
binaryString = Convert.ToString(jMask, 2) + binaryString;
break;
case 'k':
binaryString = Convert.ToString(kMask, 2) + binaryString;
break;
case 'l':
binaryString = Convert.ToString(lMask, 2) + binaryString;
break;
case 'm':
binaryString = Convert.ToString(mMask, 2) + binaryString;
break;
case 'n':
binaryString = Convert.ToString(nMask, 2) + binaryString;
break;
case 'o':
binaryString = Convert.ToString(oMask, 2) + binaryString;
break;
case 'p':
binaryString = Convert.ToString(pMask, 2) + binaryString;
break;
case 'q':
binaryString = Convert.ToString(qMask, 2) + binaryString;
break;
case 'r':
binaryString = Convert.ToString(rMask, 2) + binaryString;
break;
case 's':
binaryString = Convert.ToString(sMask, 2) + binaryString;
break;
case 't':
binaryString = Convert.ToString(tMask, 2) + binaryString;
break;
case 'u':
binaryString = Convert.ToString(uMask, 2) + binaryString;
break;
case 'v':
binaryString = Convert.ToString(vMask, 2) + binaryString;
break;
case 'w':
binaryString = Convert.ToString(wMask, 2) + binaryString;
break;
case 'x':
binaryString = Convert.ToString(xMask, 2) + binaryString;
break;
case 'y':
binaryString = Convert.ToString(yMask, 2) + binaryString;
break;
case 'z':
binaryString = Convert.ToString(zMask, 2) + binaryString;
break;
case '0':
binaryString = Convert.ToString(n0Mask, 2) + binaryString;
break;
case '1':
binaryString = Convert.ToString(n1Mask, 2) + binaryString;
break;
case '2':
binaryString = Convert.ToString(n2Mask, 2) + binaryString;
break;
case '3':
binaryString = Convert.ToString(n3Mask, 2) + binaryString;
break;
case '4':
binaryString = Convert.ToString(n4Mask, 2) + binaryString;
break;
case '5':
binaryString = Convert.ToString(n5Mask, 2) + binaryString;
break;
case '6':
binaryString = Convert.ToString(n6Mask, 2) + binaryString;
break;
case '7':
binaryString = Convert.ToString(n7Mask, 2) + binaryString;
break;
case '8':
binaryString = Convert.ToString(n8Mask, 2) + binaryString;
break;
case '9':
binaryString = Convert.ToString(n9Mask, 2) + binaryString;
break;
}
return Convert.ToInt64(binaryString, 2);
}
}
public int solution(string S) {
var ret = 0;
long xorResult = 0;
// pair <xorResult, position>
var xorResultIndexes = new Dictionary<long, int>();
for (var i= 0; i < S.Length; i++)
{
xorResult = xorResult ^ ElementsMask.AppendMask(S[i]);
if (xorResult == 0)
{
if (i+1 > ret)
{
ret = i + 1;
}
}
else if (!xorResultIndexes.ContainsKey(xorResult))
{
// first appearance of this negative total sum
xorResultIndexes.Add(xorResult, i);
}
else
{
if(i - xorResultIndexes[xorResult] > ret)
{
ret = i - xorResultIndexes[xorResult];
}
}
}
//https://app.codility.com/cert/view/certPSRNUM-VTEXMSJPV2F6S6FD/details/
return ret;
}
}
using System;
// you can also use other imports, for example:
using System.Collections.Generic;
// you can write to stdout for debugging purposes, e.g.
// Console.WriteLine("this is a debug message");
class Solution {
public static class ElementsMask
{
static long aMask = 1;
static long bMask = (long)1 << 1;
static long cMask = (long)1 << 2;
static long dMask = (long)1 << 3;
static long eMask = (long)1 << 4;
static long fMask = (long)1 << 5;
static long gMask = (long)1 << 6;
static long hMask = (long)1 << 7;
static long iMask = (long)1 << 8;
static long jMask = (long)1 << 9;
static long kMask = (long)1 << 10;
static long lMask = (long)1 << 11;
static long mMask = (long)1 << 12;
static long nMask = (long)1 << 13;
static long oMask = (long)1 << 14;
static long pMask = (long)1 << 15;
static long qMask = (long)1 << 16;
static long rMask = (long)1 << 17;
static long sMask = (long)1 << 18;
static long tMask = (long)1 << 19;
static long uMask = (long)1 << 20;
static long vMask = (long)1 << 21;
static long wMask = (long)1 << 22;
static long xMask = (long)1 << 23;
static long yMask = (long)1 << 24;
static long zMask = (long)1 << 25;
static long n0Mask = (long)1 << 26;
static long n1Mask = (long)1 << 27;
static long n2Mask = (long)1 << 28;
static long n3Mask = (long)1 << 29;
static long n4Mask = (long)1 << 30;
static long n5Mask = (long)1 << 31;
static long n6Mask = (long)1 << 32;
static long n7Mask = (long)1 << 33;
static long n8Mask = (long)1 << 34;
static long n9Mask = (long)1 << 35;
public static long AppendMask(char c)
{
var binaryString = Convert.ToString(c, 2).PadLeft(8, '0');
switch(c)
{
case 'a':
binaryString = Convert.ToString(aMask, 2) + binaryString;
break;
case 'b':
binaryString = Convert.ToString(bMask, 2) + binaryString;
break;
case 'c':
binaryString = Convert.ToString(cMask, 2) + binaryString;
break;
case 'd':
binaryString = Convert.ToString(dMask, 2) + binaryString;
break;
case 'e':
binaryString = Convert.ToString(eMask, 2) + binaryString;
break;
case 'f':
binaryString = Convert.ToString(fMask, 2) + binaryString;
break;
case 'g':
binaryString = Convert.ToString(gMask, 2) + binaryString;
break;
case 'h':
binaryString = Convert.ToString(hMask, 2) + binaryString;
break;
case 'i':
binaryString = Convert.ToString(iMask, 2) + binaryString;
break;
case 'j':
binaryString = Convert.ToString(jMask, 2) + binaryString;
break;
case 'k':
binaryString = Convert.ToString(kMask, 2) + binaryString;
break;
case 'l':
binaryString = Convert.ToString(lMask, 2) + binaryString;
break;
case 'm':
binaryString = Convert.ToString(mMask, 2) + binaryString;
break;
case 'n':
binaryString = Convert.ToString(nMask, 2) + binaryString;
break;
case 'o':
binaryString = Convert.ToString(oMask, 2) + binaryString;
break;
case 'p':
binaryString = Convert.ToString(pMask, 2) + binaryString;
break;
case 'q':
binaryString = Convert.ToString(qMask, 2) + binaryString;
break;
case 'r':
binaryString = Convert.ToString(rMask, 2) + binaryString;
break;
case 's':
binaryString = Convert.ToString(sMask, 2) + binaryString;
break;
case 't':
binaryString = Convert.ToString(tMask, 2) + binaryString;
break;
case 'u':
binaryString = Convert.ToString(uMask, 2) + binaryString;
break;
case 'v':
binaryString = Convert.ToString(vMask, 2) + binaryString;
break;
case 'w':
binaryString = Convert.ToString(wMask, 2) + binaryString;
break;
case 'x':
binaryString = Convert.ToString(xMask, 2) + binaryString;
break;
case 'y':
binaryString = Convert.ToString(yMask, 2) + binaryString;
break;
case 'z':
binaryString = Convert.ToString(zMask, 2) + binaryString;
break;
case '0':
binaryString = Convert.ToString(n0Mask, 2) + binaryString;
break;
case '1':
binaryString = Convert.ToString(n1Mask, 2) + binaryString;
break;
case '2':
binaryString = Convert.ToString(n2Mask, 2) + binaryString;
break;
case '3':
binaryString = Convert.ToString(n3Mask, 2) + binaryString;
break;
case '4':
binaryString = Convert.ToString(n4Mask, 2) + binaryString;
break;
case '5':
binaryString = Convert.ToString(n5Mask, 2) + binaryString;
break;
case '6':
binaryString = Convert.ToString(n6Mask, 2) + binaryString;
break;
case '7':
binaryString = Convert.ToString(n7Mask, 2) + binaryString;
break;
case '8':
binaryString = Convert.ToString(n8Mask, 2) + binaryString;
break;
case '9':
binaryString = Convert.ToString(n9Mask, 2) + binaryString;
break;
}
return Convert.ToInt64(binaryString, 2);
}
}
public int solution(string S) {
var ret = 0;
long xorResult = 0;
// pair <xorResult, position>
var xorResultIndexes = new Dictionary<long, int>();
for (var i= 0; i < S.Length; i++)
{
xorResult = xorResult ^ ElementsMask.AppendMask(S[i]);
if (xorResult == 0)
{
if (i+1 > ret)
{
ret = i + 1;
}
}
else if (!xorResultIndexes.ContainsKey(xorResult))
{
// first appearance of this negative total sum
xorResultIndexes.Add(xorResult, i);
}
else
{
if(i - xorResultIndexes[xorResult] > ret)
{
ret = i - xorResultIndexes[xorResult];
}
}
}
//https://app.codility.com/cert/view/certPSRNUM-VTEXMSJPV2F6S6FD/details/
return ret;
}
}
using System;
// you can also use other imports, for example:
using System.Collections.Generic;
// you can write to stdout for debugging purposes, e.g.
// Console.WriteLine("this is a debug message");
class Solution {
public static class ElementsMask
{
static long aMask = 1;
static long bMask = (long)1 << 1;
static long cMask = (long)1 << 2;
static long dMask = (long)1 << 3;
static long eMask = (long)1 << 4;
static long fMask = (long)1 << 5;
static long gMask = (long)1 << 6;
static long hMask = (long)1 << 7;
static long iMask = (long)1 << 8;
static long jMask = (long)1 << 9;
static long kMask = (long)1 << 10;
static long lMask = (long)1 << 11;
static long mMask = (long)1 << 12;
static long nMask = (long)1 << 13;
static long oMask = (long)1 << 14;
static long pMask = (long)1 << 15;
static long qMask = (long)1 << 16;
static long rMask = (long)1 << 17;
static long sMask = (long)1 << 18;
static long tMask = (long)1 << 19;
static long uMask = (long)1 << 20;
static long vMask = (long)1 << 21;
static long wMask = (long)1 << 22;
static long xMask = (long)1 << 23;
static long yMask = (long)1 << 24;
static long zMask = (long)1 << 25;
static long n0Mask = (long)1 << 26;
static long n1Mask = (long)1 << 27;
static long n2Mask = (long)1 << 28;
static long n3Mask = (long)1 << 29;
static long n4Mask = (long)1 << 30;
static long n5Mask = (long)1 << 31;
static long n6Mask = (long)1 << 32;
static long n7Mask = (long)1 << 33;
static long n8Mask = (long)1 << 34;
static long n9Mask = (long)1 << 35;
public static long AppendMask(char c)
{
var binaryString = Convert.ToString(c, 2).PadLeft(8, '0');
switch(c)
{
case 'a':
binaryString = Convert.ToString(aMask, 2) + binaryString;
break;
case 'b':
binaryString = Convert.ToString(bMask, 2) + binaryString;
break;
case 'c':
binaryString = Convert.ToString(cMask, 2) + binaryString;
break;
case 'd':
binaryString = Convert.ToString(dMask, 2) + binaryString;
break;
case 'e':
binaryString = Convert.ToString(eMask, 2) + binaryString;
break;
case 'f':
binaryString = Convert.ToString(fMask, 2) + binaryString;
break;
case 'g':
binaryString = Convert.ToString(gMask, 2) + binaryString;
break;
case 'h':
binaryString = Convert.ToString(hMask, 2) + binaryString;
break;
case 'i':
binaryString = Convert.ToString(iMask, 2) + binaryString;
break;
case 'j':
binaryString = Convert.ToString(jMask, 2) + binaryString;
break;
case 'k':
binaryString = Convert.ToString(kMask, 2) + binaryString;
break;
case 'l':
binaryString = Convert.ToString(lMask, 2) + binaryString;
break;
case 'm':
binaryString = Convert.ToString(mMask, 2) + binaryString;
break;
case 'n':
binaryString = Convert.ToString(nMask, 2) + binaryString;
break;
case 'o':
binaryString = Convert.ToString(oMask, 2) + binaryString;
break;
case 'p':
binaryString = Convert.ToString(pMask, 2) + binaryString;
break;
case 'q':
binaryString = Convert.ToString(qMask, 2) + binaryString;
break;
case 'r':
binaryString = Convert.ToString(rMask, 2) + binaryString;
break;
case 's':
binaryString = Convert.ToString(sMask, 2) + binaryString;
break;
case 't':
binaryString = Convert.ToString(tMask, 2) + binaryString;
break;
case 'u':
binaryString = Convert.ToString(uMask, 2) + binaryString;
break;
case 'v':
binaryString = Convert.ToString(vMask, 2) + binaryString;
break;
case 'w':
binaryString = Convert.ToString(wMask, 2) + binaryString;
break;
case 'x':
binaryString = Convert.ToString(xMask, 2) + binaryString;
break;
case 'y':
binaryString = Convert.ToString(yMask, 2) + binaryString;
break;
case 'z':
binaryString = Convert.ToString(zMask, 2) + binaryString;
break;
case '0':
binaryString = Convert.ToString(n0Mask, 2) + binaryString;
break;
case '1':
binaryString = Convert.ToString(n1Mask, 2) + binaryString;
break;
case '2':
binaryString = Convert.ToString(n2Mask, 2) + binaryString;
break;
case '3':
binaryString = Convert.ToString(n3Mask, 2) + binaryString;
break;
case '4':
binaryString = Convert.ToString(n4Mask, 2) + binaryString;
break;
case '5':
binaryString = Convert.ToString(n5Mask, 2) + binaryString;
break;
case '6':
binaryString = Convert.ToString(n6Mask, 2) + binaryString;
break;
case '7':
binaryString = Convert.ToString(n7Mask, 2) + binaryString;
break;
case '8':
binaryString = Convert.ToString(n8Mask, 2) + binaryString;
break;
case '9':
binaryString = Convert.ToString(n9Mask, 2) + binaryString;
break;
}
return Convert.ToInt64(binaryString, 2);
}
}
public int solution(string S) {
var ret = 0;
long xorResult = 0;
// pair <xorResult, position>
var xorResultIndexes = new Dictionary<long, int>();
for (var i= 0; i < S.Length; i++)
{
xorResult = xorResult ^ ElementsMask.AppendMask(S[i]);
if (xorResult == 0)
{
if (i+1 > ret)
{
ret = i + 1;
}
}
else if (!xorResultIndexes.ContainsKey(xorResult))
{
// first appearance of this negative total sum
xorResultIndexes.Add(xorResult, i);
}
else
{
if(i - xorResultIndexes[xorResult] > ret)
{
ret = i - xorResultIndexes[xorResult];
}
}
}
//https://app.codility.com/cert/view/certPSRNUM-VTEXMSJPV2F6S6FD/details/
return ret;
}
}
The solution obtained perfect score.