DEV Community

Jatin Jayadev
Jatin Jayadev

Posted on

Day 51: Competitive Programming Journal

Date: November 14, 2024
Hello Everyone,

Today marks Day 51 of my competitive programming journey. Here's what I worked on today:

What I Did Today:
I solved two problems: Generate all balanced parentheses of length 2n and Find the longest common subsequence between two strings.

1. Generate all balanced parentheses of length 2n (Backtracking):
Problem:
Given a number n, generate all combinations of n pairs of balanced parentheses.

Explanation:

  • Use recursion and backtracking to build the combinations.
  • Track the number of open and close parentheses to ensure balance.

Implementation:

void generateParentheses(int open, int close, string current, vector<string>& result) {
    if (open == 0 && close == 0) {
        result.push_back(current);
        return;
    }

    if (open > 0) {
        generateParentheses(open - 1, close, current + "(", result);
    }

    if (close > open) {
        generateParentheses(open, close - 1, current + ")", result);
    }
}

vector<string> balancedParentheses(int n) {
    vector<string> result;
    generateParentheses(n, n, "", result);
    return result;
}
Enter fullscreen mode Exit fullscreen mode

2. Find the longest common subsequence between two strings (Recursion):
Problem:
Given two strings, find the length of their longest common subsequence.

Explanation:

  • Use recursion to compare characters from both strings.
  • If characters match, add 1 and move to the next characters in both strings.
  • Otherwise, explore both possibilities (skip one character in each string) and take the maximum length.

Implementation:

int longestCommonSubsequence(string s1, string s2, int i, int j) {
    if (i == s1.length() || j == s2.length()) {
        return 0;
    }

    if (s1[i] == s2[j]) {
        return 1 + longestCommonSubsequence(s1, s2, i + 1, j + 1);
    } else {
        return max(longestCommonSubsequence(s1, s2, i + 1, j),
                   longestCommonSubsequence(s1, s2, i, j + 1));
    }
}
Enter fullscreen mode Exit fullscreen mode

Reflection:
Today’s problems were an excellent mix of recursion and backtracking. Generating balanced parentheses was particularly enjoyable as it required creative problem-solving. The longest common subsequence problem strengthened my understanding of recursion and string manipulations.

Stay tuned for more updates, and happy coding!

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay