String contains all chars of a second string

Check if one string contains all chars of a second string (doesn’t have to be in the same order), return the start index and end index.

For example:

Given: S1=”b12avi” S2=”iva

Then: S1 contains S2, start index is 3, end index is 5

Test:

        [TestMethod]
public void TestStringContainsAllChars()
{
int start;
int end;
bool contains = StringContainsAllChars.Check("b12avi", "iva", out start, out end );
Assert.IsTrue(contains);
Assert.AreEqual(3, start);
Assert.AreEqual(5, end);

bool doesntContain = StringContainsAllChars.Check("b12avi", "ll", out start, out end);
Assert.IsFalse(doesntContain);
}
Solution: 
        public static bool Check(string containerString, string containedString, out int start, out int end)
{
if (containerString.Length < containedString.Length)
{
throw new Exception("Invalid input, container string should be bigger than the contained string");
}

if (containerString.Length == 0 || containedString.Length == 0)
{
throw new Exception("Invalid input, container/contained string should be bigger than zero");
}

start = -1;
end = -1;

var indexes = new List<int>();
for (int i = 0; i < containedString.Length; i++)
{
char containedChar = containedString[i];
int index = -1;
for (int j = 0; j < containerString.Length; j++)
{
char containerChar = containerString[j];
if (containerChar == containedChar)
{
index = j;
break;
}
}

if (index == -1)
{
return false;
}
indexes.Add(index);
}

indexes.Sort();
start = indexes[0];
end = indexes[indexes.Count - 1];
return true;
}
}



Comments