Leetcode 1544. Make String Great


Use two pointers to iterate through the string checking each adjacent character to see if it is "bad" or "good".


First if the string is 1 or fewer characters we know it is good so we can just return it.

If that's not the case, we change it to an array and then to a list so we can dynamically resize it.

Then while p2 is less than the count of the list, we just iterate through and using the ASCII values, check to see if the two characters are bad. If they are, we remove them from the list and reset out pointers. If they are good, we just increment the pointers.

Finally when we reach the end of the list we return the remaining string.


public class Solution 
    public string MakeGood(string s) 
        if(s.Length == 0 || s.Length == 1)
            return s;
        //convert string to list
        var arr = s.ToCharArray();
        var list = new List<char>(arr);
        //iterate through string with 2 pointers
        var p1 = 0;
        var p2 = 1;
        while(p2 < list.Count)
            var num1 = list[p1];
            var num2 = list[p2];
            //check if adjacent characters are bad
            if(Math.Abs(num1 - num2) == 32)
                //if so remove them and reset pointers
                list.RemoveRange(p1, 2);
                p1 = 0;
                p2 = 1;        
                p1 = p2;

        return new string(list.ToArray());