Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: Longest Path With Different Adjacent Characters

Updated
3 min read

Introduction

In this blog post, we will explore how to solve the LeetCode problem "2246" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

Problem Statement

You are given a tree (i.e. a connected, undirected graph that has no cycles) rooted at node 0 consisting of n nodes numbered from 0 to n - 1. The tree is represented by a 0-indexed array parent of size n, where parent[i] is the parent of node i. Since node 0 is the root, parent[0] == -1. You are also given a string s of length n, where s[i] is the character assigned to node i. Return the length of the longest path in the tree such that no pair of adjacent nodes on the path have the same character assigned to them. Example 1: Input: parent = [-1,0,0,1,1,2], s = "abacbe" Output: 3 Explanation: The longest path where each two adjacent nodes have different characters in the tree is the path: 0 -> 1 -> 3. The length of this path is 3, so 3 is returned. It can be proven that there is no longer path that satisfies the conditions. Example 2: Input: parent = [-1,0,0,0], s = "aabc" Output: 3 Explanation: The longest path where each two adjacent nodes have different characters is the path: 2 -> 0 -> 3. The length of this path is 3, so 3 is returned. Constraints: n == parent.length == s.length 1 <= n <= 105 0 <= parent[i] <= n - 1 for all i >= 1 parent[0] == -1 parent represents a valid tree. s consists of only lowercase English letters.

Explanation

Here's a breakdown of the approach and the Python code:

  • High-Level Approach:

    • Represent the tree using an adjacency list.
    • Perform a Depth-First Search (DFS) starting from the root. During the DFS, calculate the longest path for each node, considering the constraint of different adjacent characters.
    • Maintain a global variable to keep track of the maximum path length found so far during the DFS traversal.
  • Complexity:

    • Runtime Complexity: O(N), where N is the number of nodes.
    • Storage Complexity: O(N), due to the adjacency list and recursion stack in DFS.

Code

    def longestPath(parent, s):
    n = len(parent)
    adj = [[] for _ in range(n)]
    for i in range(1, n):
        adj[parent[i]].append(i)

    max_len = 1

    def dfs(node):
        nonlocal max_len
        len1 = 0
        len2 = 0

        for child in adj[node]:
            child_len = dfs(child)
            if s[node] != s[child]:
                if child_len > len1:
                    len2 = len1
                    len1 = child_len
                elif child_len > len2:
                    len2 = child_len

        max_len = max(max_len, len1 + len2 + 1)
        return len1 + 1

    dfs(0)
    return max_len

More from this blog

C

Chatmagic blog

2894 posts