{"id":5078,"date":"2024-11-19T20:55:14","date_gmt":"2024-11-19T20:55:14","guid":{"rendered":"https:\/\/algocademy.com\/blog\/top-20-coding-interview-questions-ace-your-technical-interview\/"},"modified":"2024-11-19T20:55:14","modified_gmt":"2024-11-19T20:55:14","slug":"top-20-coding-interview-questions-ace-your-technical-interview","status":"publish","type":"post","link":"https:\/\/algocademy.com\/blog\/top-20-coding-interview-questions-ace-your-technical-interview\/","title":{"rendered":"Top 20 Coding Interview Questions: Ace Your Technical Interview"},"content":{"rendered":"<p><!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD HTML 4.0 Transitional\/\/EN\" \"http:\/\/www.w3.org\/TR\/REC-html40\/loose.dtd\"><br \/>\n<html><body><\/p>\n<article>\n<p>Are you preparing for a coding interview at a top tech company? Whether you&#8217;re aiming for a position at a FAANG company (Facebook, Amazon, Apple, Netflix, Google) or any other tech giant, it&#8217;s crucial to be well-prepared for the technical interview. In this comprehensive guide, we&#8217;ll explore the 20 most common coding interview questions, provide insights on how to approach them, and offer tips to help you succeed in your next interview.<\/p>\n<h2>Why Coding Interviews Matter<\/h2>\n<p>Coding interviews are a critical part of the hiring process for software engineering positions. They allow companies to assess a candidate&#8217;s problem-solving skills, coding ability, and algorithmic thinking. By understanding and practicing these common questions, you&#8217;ll be better equipped to showcase your skills and land your dream job.<\/p>\n<h2>The 20 Most Common Coding Interview Questions<\/h2>\n<p>Let&#8217;s dive into the top 20 coding interview questions you&#8217;re likely to encounter:<\/p>\n<h3>1. Two Sum<\/h3>\n<p>Given an array of integers and a target sum, return the indices of two numbers in the array that add up to the target.<\/p>\n<pre><code>def two_sum(nums, target):\n    num_dict = {}\n    for i, num in enumerate(nums):\n        complement = target - num\n        if complement in num_dict:\n            return [num_dict[complement], i]\n        num_dict[num] = i\n    return []\n\n# Example usage\nprint(two_sum([2, 7, 11, 15], 9))  # Output: [0, 1]\n<\/code><\/pre>\n<h3>2. Reverse a Linked List<\/h3>\n<p>Given the head of a singly linked list, reverse the list and return the new head.<\/p>\n<pre><code>class ListNode:\n    def __init__(self, val=0, next=None):\n        self.val = val\n        self.next = next\n\ndef reverse_linked_list(head):\n    prev = None\n    current = head\n    while current:\n        next_node = current.next\n        current.next = prev\n        prev = current\n        current = next_node\n    return prev\n\n# Example usage\n# Create a linked list: 1 -&gt; 2 -&gt; 3 -&gt; 4 -&gt; 5\nhead = ListNode(1)\nhead.next = ListNode(2)\nhead.next.next = ListNode(3)\nhead.next.next.next = ListNode(4)\nhead.next.next.next.next = ListNode(5)\n\n# Reverse the linked list\nnew_head = reverse_linked_list(head)\n\n# Print the reversed list\ncurrent = new_head\nwhile current:\n    print(current.val, end=\" \")\n    current = current.next\n# Output: 5 4 3 2 1\n<\/code><\/pre>\n<h3>3. Valid Parentheses<\/h3>\n<p>Given a string containing just the characters &#8216;(&#8216;, &#8216;)&#8217;, &#8216;{&#8216;, &#8216;}&#8217;, &#8216;[&#8216; and &#8216;]&#8217;, determine if the input string is valid. An input string is valid if:<\/p>\n<ol>\n<li>Open brackets must be closed by the same type of brackets.<\/li>\n<li>Open brackets must be closed in the correct order.<\/li>\n<\/ol>\n<pre><code>def is_valid_parentheses(s):\n    stack = []\n    mapping = {\")\": \"(\", \"}\": \"{\", \"]\": \"[\"}\n    for char in s:\n        if char in mapping:\n            if not stack or stack[-1] != mapping[char]:\n                return False\n            stack.pop()\n        else:\n            stack.append(char)\n    return len(stack) == 0\n\n# Example usage\nprint(is_valid_parentheses(\"()[]{}\"))  # Output: True\nprint(is_valid_parentheses(\"([)]\"))    # Output: False\n<\/code><\/pre>\n<h3>4. Merge Two Sorted Lists<\/h3>\n<p>Merge two sorted linked lists and return it as a new sorted list.<\/p>\n<pre><code>class ListNode:\n    def __init__(self, val=0, next=None):\n        self.val = val\n        self.next = next\n\ndef merge_two_lists(l1, l2):\n    dummy = ListNode(0)\n    current = dummy\n    \n    while l1 and l2:\n        if l1.val &lt; l2.val:\n            current.next = l1\n            l1 = l1.next\n        else:\n            current.next = l2\n            l2 = l2.next\n        current = current.next\n    \n    current.next = l1 if l1 else l2\n    return dummy.next\n\n# Example usage\n# Create two sorted linked lists\nl1 = ListNode(1)\nl1.next = ListNode(2)\nl1.next.next = ListNode(4)\n\nl2 = ListNode(1)\nl2.next = ListNode(3)\nl2.next.next = ListNode(4)\n\n# Merge the lists\nmerged = merge_two_lists(l1, l2)\n\n# Print the merged list\ncurrent = merged\nwhile current:\n    print(current.val, end=\" \")\n    current = current.next\n# Output: 1 1 2 3 4 4\n<\/code><\/pre>\n<h3>5. Maximum Subarray<\/h3>\n<p>Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.<\/p>\n<pre><code>def max_subarray(nums):\n    max_sum = current_sum = nums[0]\n    for num in nums[1:]:\n        current_sum = max(num, current_sum + num)\n        max_sum = max(max_sum, current_sum)\n    return max_sum\n\n# Example usage\nprint(max_subarray([-2, 1, -3, 4, -1, 2, 1, -5, 4]))  # Output: 6\n<\/code><\/pre>\n<h3>6. Binary Tree Level Order Traversal<\/h3>\n<p>Given a binary tree, return the level order traversal of its nodes&#8217; values. (i.e., from left to right, level by level)<\/p>\n<pre><code>from collections import deque\n\nclass TreeNode:\n    def __init__(self, val=0, left=None, right=None):\n        self.val = val\n        self.left = left\n        self.right = right\n\ndef level_order_traversal(root):\n    if not root:\n        return []\n    \n    result = []\n    queue = deque([root])\n    \n    while queue:\n        level_size = len(queue)\n        level = []\n        \n        for _ in range(level_size):\n            node = queue.popleft()\n            level.append(node.val)\n            \n            if node.left:\n                queue.append(node.left)\n            if node.right:\n                queue.append(node.right)\n        \n        result.append(level)\n    \n    return result\n\n# Example usage\n# Create a binary tree\nroot = TreeNode(3)\nroot.left = TreeNode(9)\nroot.right = TreeNode(20)\nroot.right.left = TreeNode(15)\nroot.right.right = TreeNode(7)\n\nprint(level_order_traversal(root))\n# Output: [[3], [9, 20], [15, 7]]\n<\/code><\/pre>\n<h3>7. Implement a Trie (Prefix Tree)<\/h3>\n<p>Implement a trie with insert, search, and startsWith methods.<\/p>\n<pre><code>class TrieNode:\n    def __init__(self):\n        self.children = {}\n        self.is_end_of_word = False\n\nclass Trie:\n    def __init__(self):\n        self.root = TrieNode()\n    \n    def insert(self, word):\n        node = self.root\n        for char in word:\n            if char not in node.children:\n                node.children[char] = TrieNode()\n            node = node.children[char]\n        node.is_end_of_word = True\n    \n    def search(self, word):\n        node = self.root\n        for char in word:\n            if char not in node.children:\n                return False\n            node = node.children[char]\n        return node.is_end_of_word\n    \n    def starts_with(self, prefix):\n        node = self.root\n        for char in prefix:\n            if char not in node.children:\n                return False\n            node = node.children[char]\n        return True\n\n# Example usage\ntrie = Trie()\ntrie.insert(\"apple\")\nprint(trie.search(\"apple\"))    # Output: True\nprint(trie.search(\"app\"))      # Output: False\nprint(trie.starts_with(\"app\")) # Output: True\ntrie.insert(\"app\")\nprint(trie.search(\"app\"))      # Output: True\n<\/code><\/pre>\n<h3>8. Implement a Queue using Stacks<\/h3>\n<p>Implement a first in first out (FIFO) queue using only two stacks.<\/p>\n<pre><code>class MyQueue:\n    def __init__(self):\n        self.stack1 = []\n        self.stack2 = []\n    \n    def push(self, x):\n        self.stack1.append(x)\n    \n    def pop(self):\n        self.peek()\n        return self.stack2.pop()\n    \n    def peek(self):\n        if not self.stack2:\n            while self.stack1:\n                self.stack2.append(self.stack1.pop())\n        return self.stack2[-1]\n    \n    def empty(self):\n        return not self.stack1 and not self.stack2\n\n# Example usage\nqueue = MyQueue()\nqueue.push(1)\nqueue.push(2)\nprint(queue.peek())  # Output: 1\nprint(queue.pop())   # Output: 1\nprint(queue.empty()) # Output: False\n<\/code><\/pre>\n<h3>9. Find the Kth Largest Element in an Array<\/h3>\n<p>Given an unsorted array, find the kth largest element in it.<\/p>\n<pre><code>import heapq\n\ndef find_kth_largest(nums, k):\n    return heapq.nlargest(k, nums)[-1]\n\n# Example usage\nprint(find_kth_largest([3, 2, 1, 5, 6, 4], 2))  # Output: 5\nprint(find_kth_largest([3, 2, 3, 1, 2, 4, 5, 5, 6], 4))  # Output: 4\n<\/code><\/pre>\n<h3>10. Longest Palindromic Substring<\/h3>\n<p>Given a string s, find the longest palindromic substring in s.<\/p>\n<pre><code>def longest_palindrome(s):\n    if not s:\n        return \"\"\n    \n    start = 0\n    max_length = 1\n    \n    for i in range(len(s)):\n        # Check for odd-length palindromes\n        left, right = i, i\n        while left &gt;= 0 and right &lt; len(s) and s[left] == s[right]:\n            if right - left + 1 &gt; max_length:\n                start = left\n                max_length = right - left + 1\n            left -= 1\n            right += 1\n        \n        # Check for even-length palindromes\n        left, right = i, i + 1\n        while left &gt;= 0 and right &lt; len(s) and s[left] == s[right]:\n            if right - left + 1 &gt; max_length:\n                start = left\n                max_length = right - left + 1\n            left -= 1\n            right += 1\n    \n    return s[start:start + max_length]\n\n# Example usage\nprint(longest_palindrome(\"babad\"))  # Output: \"bab\" or \"aba\"\nprint(longest_palindrome(\"cbbd\"))   # Output: \"bb\"\n<\/code><\/pre>\n<h3>11. Implement a LRU Cache<\/h3>\n<p>Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and put.<\/p>\n<pre><code>from collections import OrderedDict\n\nclass LRUCache:\n    def __init__(self, capacity):\n        self.capacity = capacity\n        self.cache = OrderedDict()\n    \n    def get(self, key):\n        if key not in self.cache:\n            return -1\n        self.cache.move_to_end(key)\n        return self.cache[key]\n    \n    def put(self, key, value):\n        if key in self.cache:\n            self.cache.move_to_end(key)\n        self.cache[key] = value\n        if len(self.cache) &gt; self.capacity:\n            self.cache.popitem(last=False)\n\n# Example usage\ncache = LRUCache(2)\ncache.put(1, 1)\ncache.put(2, 2)\nprint(cache.get(1))    # Output: 1\ncache.put(3, 3)\nprint(cache.get(2))    # Output: -1\ncache.put(4, 4)\nprint(cache.get(1))    # Output: -1\nprint(cache.get(3))    # Output: 3\nprint(cache.get(4))    # Output: 4\n<\/code><\/pre>\n<h3>12. Implement a Min Stack<\/h3>\n<p>Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.<\/p>\n<pre><code>class MinStack:\n    def __init__(self):\n        self.stack = []\n        self.min_stack = []\n    \n    def push(self, val):\n        self.stack.append(val)\n        if not self.min_stack or val &lt;= self.min_stack[-1]:\n            self.min_stack.append(val)\n    \n    def pop(self):\n        if self.stack.pop() == self.min_stack[-1]:\n            self.min_stack.pop()\n    \n    def top(self):\n        return self.stack[-1]\n    \n    def get_min(self):\n        return self.min_stack[-1]\n\n# Example usage\nmin_stack = MinStack()\nmin_stack.push(-2)\nmin_stack.push(0)\nmin_stack.push(-3)\nprint(min_stack.get_min())  # Output: -3\nmin_stack.pop()\nprint(min_stack.top())      # Output: 0\nprint(min_stack.get_min())  # Output: -2\n<\/code><\/pre>\n<h3>13. Rotate Image<\/h3>\n<p>You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise).<\/p>\n<pre><code>def rotate_image(matrix):\n    n = len(matrix)\n    \n    # Transpose the matrix\n    for i in range(n):\n        for j in range(i, n):\n            matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]\n    \n    # Reverse each row\n    for i in range(n):\n        matrix[i].reverse()\n\n# Example usage\nmatrix = [\n    [1, 2, 3],\n    [4, 5, 6],\n    [7, 8, 9]\n]\nrotate_image(matrix)\nprint(matrix)\n# Output: [[7, 4, 1], [8, 5, 2], [9, 6, 3]]\n<\/code><\/pre>\n<h3>14. Serialize and Deserialize Binary Tree<\/h3>\n<p>Design an algorithm to serialize and deserialize a binary tree.<\/p>\n<pre><code>class TreeNode:\n    def __init__(self, val=0, left=None, right=None):\n        self.val = val\n        self.left = left\n        self.right = right\n\nclass Codec:\n    def serialize(self, root):\n        if not root:\n            return \"null\"\n        return f\"{root.val},{self.serialize(root.left)},{self.serialize(root.right)}\"\n    \n    def deserialize(self, data):\n        def dfs():\n            val = next(values)\n            if val == \"null\":\n                return None\n            node = TreeNode(int(val))\n            node.left = dfs()\n            node.right = dfs()\n            return node\n        \n        values = iter(data.split(\",\"))\n        return dfs()\n\n# Example usage\nroot = TreeNode(1)\nroot.left = TreeNode(2)\nroot.right = TreeNode(3)\nroot.right.left = TreeNode(4)\nroot.right.right = TreeNode(5)\n\ncodec = Codec()\nserialized = codec.serialize(root)\nprint(serialized)  # Output: 1,2,null,null,3,4,null,null,5,null,null\ndeserialized = codec.deserialize(serialized)\nprint(codec.serialize(deserialized))  # Output: 1,2,null,null,3,4,null,null,5,null,null\n<\/code><\/pre>\n<h3>15. Word Break<\/h3>\n<p>Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, determine if s can be segmented into a space-separated sequence of one or more dictionary words.<\/p>\n<pre><code>def word_break(s, word_dict):\n    n = len(s)\n    dp = [False] * (n + 1)\n    dp[0] = True\n    \n    for i in range(1, n + 1):\n        for j in range(i):\n            if dp[j] and s[j:i] in word_dict:\n                dp[i] = True\n                break\n    \n    return dp[n]\n\n# Example usage\nprint(word_break(\"leetcode\", [\"leet\", \"code\"]))  # Output: True\nprint(word_break(\"applepenapple\", [\"apple\", \"pen\"]))  # Output: True\nprint(word_break(\"catsandog\", [\"cats\", \"dog\", \"sand\", \"and\", \"cat\"]))  # Output: False\n<\/code><\/pre>\n<h3>16. Merge Intervals<\/h3>\n<p>Given a collection of intervals, merge all overlapping intervals.<\/p>\n<pre><code>def merge_intervals(intervals):\n    intervals.sort(key=lambda x: x[0])\n    merged = []\n    \n    for interval in intervals:\n        if not merged or merged[-1][1] &lt; interval[0]:\n            merged.append(interval)\n        else:\n            merged[-1][1] = max(merged[-1][1], interval[1])\n    \n    return merged\n\n# Example usage\nprint(merge_intervals([[1,3],[2,6],[8,10],[15,18]]))  # Output: [[1,6],[8,10],[15,18]]\nprint(merge_intervals([[1,4],[4,5]]))  # Output: [[1,5]]\n<\/code><\/pre>\n<h3>17. Implement strStr()<\/h3>\n<p>Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.<\/p>\n<pre><code>def str_str(haystack, needle):\n    if not needle:\n        return 0\n    \n    for i in range(len(haystack) - len(needle) + 1):\n        if haystack[i:i+len(needle)] == needle:\n            return i\n    \n    return -1\n\n# Example usage\nprint(str_str(\"hello\", \"ll\"))  # Output: 2\nprint(str_str(\"aaaaa\", \"bba\"))  # Output: -1\n<\/code><\/pre>\n<h3>18. Longest Substring Without Repeating Characters<\/h3>\n<p>Given a string, find the length of the longest substring without repeating characters.<\/p>\n<pre><code>def length_of_longest_substring(s):\n    char_index = {}\n    max_length = 0\n    start = 0\n    \n    for i, char in enumerate(s):\n        if char in char_index and char_index[char] &gt;= start:\n            start = char_index[char] + 1\n        else:\n            max_length = max(max_length, i - start + 1)\n        char_index[char] = i\n    \n    return max_length\n\n# Example usage\nprint(length_of_longest_substring(\"abcabcbb\"))  # Output: 3\nprint(length_of_longest_substring(\"bbbbb\"))  # Output: 1\nprint(length_of_longest_substring(\"pwwkew\"))  # Output: 3\n<\/code><\/pre>\n<h3>19. Minimum Window Substring<\/h3>\n<p>Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).<\/p>\n<pre><code>from collections import Counter\n\ndef min_window(s, t):\n    if not t or not s:\n        return \"\"\n\n    dict_t = Counter(t)\n    required = len(dict_t)\n\n    left = 0\n    right = 0\n    formed = 0\n    window_counts = {}\n\n    ans = float(\"inf\"), None, None\n\n    while right &lt; len(s):\n        character = s[right]\n        window_counts[character] = window_counts.get(character, 0) + 1\n\n        if character in dict_t and window_counts[character] == dict_t[character]:\n            formed += 1\n\n        while left &lt;= right and formed == required:\n            character = s[left]\n\n            if right - left + 1 &lt; ans[0]:\n                ans = (right - left + 1, left, right)\n\n            window_counts[character] -= 1\n            if character in dict_t and window_counts[character] &lt; dict_t[character]:\n                formed -= 1\n\n            left += 1\n\n        right += 1\n\n    return \"\" if ans[0] == float(\"inf\") else s[ans[1] : ans[2] + 1]\n\n# Example usage\nprint(min_window(\"ADOBECODEBANC\", \"ABC\"))  # Output: \"BANC\"\nprint(min_window(\"a\", \"a\"))  # Output: \"a\"\n<\/code><\/pre>\n<h3>20. Median of Two Sorted Arrays<\/h3>\n<p>Given two sorted arrays nums1 and nums2 of size m and n respectively, return the median of the two sorted arrays.<\/p>\n<pre><code>def find_median_sorted_arrays(nums1, nums2):\n    if len(nums1) &gt; len(nums2):\n        nums1, nums2 = nums2, nums1\n    \n    m, n = len(nums1), len(nums2)\n    left, right = 0, m\n    \n    while left &lt;= right:\n        partition_x = (left + right) \/\/ 2\n        partition_y = (m + n + 1) \/\/ 2 - partition_x\n        \n        max_left_x = float('-inf') if partition_x == 0 else nums1[partition_x - 1]\n        min_right_x = float('inf') if partition_x == m else nums1[partition_x]\n        \n        max_left_y = float('-inf') if partition_y == 0 else nums2[partition_y - 1]\n        min_right_y = float('inf') if partition_y == n else nums2[partition_y]\n        \n        if max_left_x &lt;= min_right_y and max_left_y &lt;= min_right_x:\n            if (m + n) % 2 == 0:\n                return (max(max_left_x, max_left_y) + min(min_right_x, min_right_y)) \/ 2\n            else:\n                return max(max_left_x, max_left_y)\n        elif max_left_x &gt; min_right_y:\n            right = partition_x - 1\n        else:\n            left = partition_x + 1\n\n# Example usage\nprint(find_median_sorted_arrays([1, 3], [2]))  # Output: 2.0\nprint(find_median_sorted_arrays([1, 2], [3, 4]))  # Output: 2.5\n<\/code><\/pre>\n<h2>Tips for Succeeding in Coding Interviews<\/h2>\n<p>Now that we&#8217;ve covered the most common coding interview questions, here are some tips to help you succeed in your next technical interview:<\/p>\n<ol>\n<li><strong>Practice regularly:<\/strong> Solve coding problems on platforms like LeetCode, HackerRank, or CodeSignal to improve your problem-solving skills.<\/li>\n<li><strong>Understand the fundamentals:<\/strong> Make sure you have a solid grasp of data structures, algorithms, and time\/space complexity analysis.<\/li>\n<li><strong>Communicate your thought process:<\/strong> Explain your approach and reasoning while solving problems during the interview.<\/li>\n<li><strong>Ask clarifying questions:<\/strong> Ensure you fully understand the problem before diving into the solution.<\/li>\n<li><strong>Consider edge cases:<\/strong> Think about potential edge cases and handle them in your solution.<\/li>\n<li><strong>Optimize your solution:<\/strong> After implementing a working solution, consider ways to optimize it for better time or space complexity.<\/li>\n<li><strong>Test your code:<\/strong> Write test cases and walk through your code to catch any bugs or errors.<\/li>\n<li><strong>Learn from your mistakes:<\/strong> Review and understand the solutions to problems you couldn&#8217;t solve, and try to implement them on your own later.<\/li>\n<li><strong>Stay calm and focused:<\/strong> Remember that interviewers are interested in your problem-solving process, not just the final answer.<\/li>\n<li><strong>Practice mock interviews:<\/strong> Conduct mock interviews with friends or use online platforms to simulate real interview conditions.<\/li>\n<\/ol>\n<h2>Conclusion<\/h2>\n<p>Mastering these common coding interview questions and following the tips provided will significantly improve your chances of success in technical interviews. Remember that consistent practice and a solid understanding of fundamental concepts are key to performing well in coding interviews.<\/p>\n<p>As you prepare for your interviews, consider using resources like AlgoCademy to enhance your coding skills and gain confidence in tackling complex problems. With dedication and the right approach, you&#8217;ll be well-equipped to ace your next coding interview and land your dream job in the tech industry.<\/p>\n<\/article>\n<p><\/body><\/html><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Are you preparing for a coding interview at a top tech company? Whether you&#8217;re aiming for a position at a&#8230;<\/p>\n","protected":false},"author":1,"featured_media":5077,"comment_status":"","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23],"tags":[],"class_list":["post-5078","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-problem-solving"],"_links":{"self":[{"href":"https:\/\/algocademy.com\/blog\/wp-json\/wp\/v2\/posts\/5078"}],"collection":[{"href":"https:\/\/algocademy.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/algocademy.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/algocademy.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/algocademy.com\/blog\/wp-json\/wp\/v2\/comments?post=5078"}],"version-history":[{"count":0,"href":"https:\/\/algocademy.com\/blog\/wp-json\/wp\/v2\/posts\/5078\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/algocademy.com\/blog\/wp-json\/wp\/v2\/media\/5077"}],"wp:attachment":[{"href":"https:\/\/algocademy.com\/blog\/wp-json\/wp\/v2\/media?parent=5078"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/algocademy.com\/blog\/wp-json\/wp\/v2\/categories?post=5078"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/algocademy.com\/blog\/wp-json\/wp\/v2\/tags?post=5078"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}