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
Post a Comment