C# Coding Test Course, Exploring Debugging Use Cases

Hello! In this article, we will solve coding test problems using C# and explore the importance and application of debugging. We will examine how debugging skills can be helpful through specific cases while solving actual problems.

Problem Description

Problem: Longest Palindromic Substring

Create a function that returns the longest palindromic substring from a given string. The length of the string can be up to 1000.

Example input:


"babad"

Example output:


"bab" or "aba"

Problem Solving Process

Now, we will look at the approach to solve this problem step by step.

Step 1: Understanding the Problem

The key point of the problem is to check for palindromes in the given string. A palindrome is a string that reads the same forwards and backwards. For example, “racecar” is such an example. We need to generate all possible substrings from the given string and check each substring to see if it is a palindrome.

Step 2: Algorithm Design

To find the longest palindromic substring, we designed the following algorithm:

  1. Generate all substrings of the given string.
  2. Check if each substring is a palindrome.
  3. If it is a palindrome, compare the length of that substring and keep the longest one.

Step 3: C# Code Implementation

Now, let’s implement the C# code according to each step.


using System;

public class LongestPalindromicSubstring
{
    public string GetLongestPalindrome(string s)
    {
        if (string.IsNullOrEmpty(s)) return "";

        string longestPalindrome = "";

        for (int i = 0; i < s.Length; i++)
        {
            // Check for odd-length palindromes
            string oddPalindrome = ExpandFromCenter(s, i, i);
            if (oddPalindrome.Length > longestPalindrome.Length)
            {
                longestPalindrome = oddPalindrome;
            }

            // Check for even-length palindromes
            string evenPalindrome = ExpandFromCenter(s, i, i + 1);
            if (evenPalindrome.Length > longestPalindrome.Length)
            {
                longestPalindrome = evenPalindrome;
            }
        }

        return longestPalindrome;
    }

    private string ExpandFromCenter(string s, int left, int right)
    {
        while (left >= 0 && right < s.Length && s[left] == s[right])
        {
            left--;
            right++;
        }
        return s.Substring(left + 1, right - left - 1);
    }
}

Step 4: Debugging and Testing

Now it’s time to test the implemented code and debug for any errors.

  1. After running the code, input various cases to check if the results match the expectations.
  2. In particular, test complex strings that include whitespace characters, numbers, and special characters to ensure palindromic checking works well.

Example Test Cases


LongestPalindromicSubstring lps = new LongestPalindromicSubstring();
Console.WriteLine(lps.GetLongestPalindrome("babad")); // bab or aba
Console.WriteLine(lps.GetLongestPalindrome("cbbd")); // bb
Console.WriteLine(lps.GetLongestPalindrome("a")); // a
Console.WriteLine(lps.GetLongestPalindrome("ac")); // a
Console.WriteLine(lps.GetLongestPalindrome("racecar")); // racecar

Debugging Tips

When debugging, keep the following points in mind:

  • Carefully check variable values and use breakpoints to run the code if necessary.
  • Compare expected values and actual values at each step to identify where errors occur.
  • Break the code into small pieces and independently test each function to ensure they work properly.

Conclusion

In this article, we explored algorithm design and debugging processes through a palindromic problem utilizing C#. Debugging is a crucial step in solving problems, and it is a process that must be repeated to ensure that the program operates as expected. Take your time reviewing each step and do not hesitate to seek help when necessary.

Now you can use this problem to prepare for C# coding tests. Continue practicing and solving various problems!

Additional Learning Resources

Finally, you can refer to the following resources for deeper learning: