<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.1.1">Jekyll</generator><link href="https://pavanbadempet.gitlab.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://pavanbadempet.gitlab.io/" rel="alternate" type="text/html" /><updated>2026-09-19T06:13:08+00:00</updated><id>https://pavanbadempet.gitlab.io/feed.xml</id><title type="html">Pavan Badempet | Data Engineer | PySpark, Python, SQL | AWS &amp;amp; Azure | Hyderabad</title><subtitle>Pavan Badempet is a Data Engineer based in Hyderabad, India, specializing in production-grade, scalable data pipelines. With expertise in PySpark, Python, SQL, and AWS, he builds high-performance data lakehouses that power critical business decisions in capital markets and automotive sectors. He also integrates modern AI and LLMs into enterprise architectures.</subtitle><author><name>Pavan Badempet</name></author><entry><title type="html">3131. Find the Integer Added to Array I</title><link href="https://pavanbadempet.gitlab.io/dsa/2024/04/28/3131-Find-the-Integer-Added-to-Array-I/" rel="alternate" type="text/html" title="3131. Find the Integer Added to Array I" /><published>2024-04-28T00:00:00+00:00</published><updated>2024-04-28T00:00:00+00:00</updated><id>https://pavanbadempet.gitlab.io/dsa/2024/04/28/3131-Find-the-Integer-Added-to-Array-I</id><content type="html" xml:base="https://pavanbadempet.gitlab.io/dsa/2024/04/28/3131-Find-the-Integer-Added-to-Array-I/"><![CDATA[<p>Problem Link: <a href="https://leetcode.com/problems/find-the-integer-added-to-array-i/description/">3131. Find the Integer Added to Array I</a></p>

<h1 id="intuition">Intuition</h1>
<p>Given two arrays nums1 and nums2 of equal length, where each element in nums1 has been increased (or decreased in the case of negative) by an integer x, we aim to find the value of x such that nums1 becomes equal to nums2. Since both arrays should contain the same integers with the same frequencies after applying x, we can determine x by comparing the sum of elements in nums1 and nums2.</p>

<h1 id="approach">Approach</h1>
<ol>
  <li>Calculate the sum of all elements in nums1 and nums2.</li>
  <li>Subtract the sum of nums1 from the sum of nums2 to find the difference, which represents the value of x.</li>
  <li>Divide the difference by the length of nums1 to get the value of x.</li>
  <li>Return the value of x.</li>
</ol>

<h1 id="complexity">Complexity</h1>
<ul>
  <li>
    <p>Time complexity:
O(n), where n is the length of nums1 (or nums2 since they have the same length). We iterate through both arrays once to calculate their sums.</p>
  </li>
  <li>
    <p>Space complexity:
O(1), as we use only a constant amount of extra space.</p>
  </li>
</ul>

<h1 id="code">Code</h1>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">addedInteger</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums1</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">nums2</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="k">return</span> <span class="p">(</span><span class="nb">sum</span><span class="p">(</span><span class="n">nums2</span><span class="p">)</span> <span class="o">-</span> <span class="nb">sum</span><span class="p">(</span><span class="n">nums1</span><span class="p">))</span><span class="o">//</span><span class="nb">len</span><span class="p">(</span><span class="n">nums1</span><span class="p">)</span>
</code></pre></div></div>]]></content><author><name>Pavan Badempet</name></author><category term="[&quot;DSA&quot;]" /><category term="LeetCode" /><summary type="html"><![CDATA[Problem Link: 3131. Find the Integer Added to Array I]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://pavanbadempet.gitlab.io/assets/img/blog/LeetCode.jpg" /><media:content medium="image" url="https://pavanbadempet.gitlab.io/assets/img/blog/LeetCode.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">3132. Find the Integer Added to Array II</title><link href="https://pavanbadempet.gitlab.io/dsa/2024/04/28/3132-Find-the-Integer-Added-to-Array-II/" rel="alternate" type="text/html" title="3132. Find the Integer Added to Array II" /><published>2024-04-28T00:00:00+00:00</published><updated>2024-04-28T00:00:00+00:00</updated><id>https://pavanbadempet.gitlab.io/dsa/2024/04/28/3132-Find-the-Integer-Added-to-Array-II</id><content type="html" xml:base="https://pavanbadempet.gitlab.io/dsa/2024/04/28/3132-Find-the-Integer-Added-to-Array-II/"><![CDATA[<p>Problem Link: <a href="https://leetcode.com/problems/find-the-integer-added-to-array-ii/solutions/">3131. Find the Integer Added to Array I</a></p>

<h1 id="intuition">Intuition</h1>
<p>Solving by sorting the arrays and iterating through all possibilities for minimum difference.</p>
<h1 id="approach">Approach</h1>
<ol>
  <li>Sort both nums1 and nums2 to simplify comparison.</li>
  <li>Iterate through all pairs of indices (i, j) in nums1 (with i &lt; j).
    <ul>
      <li>Create a new array new_nums1 by removing elements at indices i and j from nums1.</li>
      <li>Calculate the difference (diff) between the first elements of nums2 and new_nums1.</li>
      <li>Check if adding diff to each element of new_nums1 results in nums2.</li>
      <li>If yes, update the minimum difference (min_diff) with the current diff.</li>
    </ul>
  </li>
  <li>Finally, return min_diff as the minimum possible integer x.</li>
</ol>

<h1 id="complexity">Complexity</h1>
<ul>
  <li>
    <p>Time complexity:
O(n^2), where n is the length of nums1. We iterate through all pairs of indices (i, j) in nums1.</p>
  </li>
  <li>
    <p>Space complexity:
O(n), where n is the length of nums1. We create a new array new_nums1 for each pair of indices.</p>
  </li>
</ul>

<h1 id="code">Code</h1>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">sys</span>
<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">minimumAddedInteger</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums1</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">nums2</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">nums1</span><span class="p">.</span><span class="n">sort</span><span class="p">()</span>
        <span class="n">nums2</span><span class="p">.</span><span class="n">sort</span><span class="p">()</span>

        <span class="n">min_diff</span> <span class="o">=</span> <span class="n">sys</span><span class="p">.</span><span class="n">maxsize</span>

        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">nums1</span><span class="p">)):</span>
            <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums1</span><span class="p">)):</span>
                <span class="n">new_nums1</span> <span class="o">=</span> <span class="n">nums1</span><span class="p">[:</span><span class="n">i</span><span class="p">]</span> <span class="o">+</span> <span class="n">nums1</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="n">j</span><span class="p">]</span> <span class="o">+</span> <span class="n">nums1</span><span class="p">[</span><span class="n">j</span><span class="o">+</span><span class="mi">1</span><span class="p">:]</span>
                <span class="n">diff</span> <span class="o">=</span> <span class="n">nums2</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">new_nums1</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
                <span class="k">if</span> <span class="nb">all</span><span class="p">(</span><span class="n">new_nums1</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">+</span> <span class="n">diff</span> <span class="o">==</span> <span class="n">nums2</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">nums2</span><span class="p">))):</span>
                    <span class="n">min_diff</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">min_diff</span><span class="p">,</span> <span class="n">diff</span><span class="p">)</span>

        <span class="k">return</span> <span class="n">min_diff</span>
</code></pre></div></div>]]></content><author><name>Pavan Badempet</name></author><category term="[&quot;DSA&quot;]" /><category term="LeetCode" /><summary type="html"><![CDATA[Problem Link: 3131. Find the Integer Added to Array I]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://pavanbadempet.gitlab.io/assets/img/blog/LeetCode.jpg" /><media:content medium="image" url="https://pavanbadempet.gitlab.io/assets/img/blog/LeetCode.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">707. Design Linked List</title><link href="https://pavanbadempet.gitlab.io/dsa/2024/04/27/707-Design-Linked-List/" rel="alternate" type="text/html" title="707. Design Linked List" /><published>2024-04-27T00:00:00+00:00</published><updated>2024-04-27T00:00:00+00:00</updated><id>https://pavanbadempet.gitlab.io/dsa/2024/04/27/707-Design-Linked-List</id><content type="html" xml:base="https://pavanbadempet.gitlab.io/dsa/2024/04/27/707-Design-Linked-List/"><![CDATA[<p>Problem Link: <a href="https://leetcode.com/problems/design-linked-list/description/">707. Design Linked List</a></p>

<h1 id="1-singly-linked-list">1. Singly Linked List</h1>
<h2 id="intuition">Intuition</h2>
<p>Implementing a singly linked list. Each node contains a value (val) and a reference to the next node (next). We’ll also consider methods for adding, getting, and deleting nodes from the list.</p>

<h2 id="approach">Approach</h2>
<ol>
  <li>Initialization: In the <strong>init</strong> method of MyLinkedList, we initialize the linked list with a head, a tail, and a size.</li>
  <li>Getting a Node: In the get method, we traverse the linked list until we reach the desired index and return the value of that node. If the index is invalid, we return -1.</li>
  <li>Adding at the Head: In the addAtHead method, we create a new node with the given value and update the head to point to this new node. If the list is empty, we also update the tail. We increment the size.</li>
  <li>Adding at the Tail: In the addAtTail method, we create a new node with the given value and update the next reference of the current tail to point to this new node. We then update the tail to be this new node and increment the size.</li>
  <li>Adding at a Given Index: In the addAtIndex method, we create a new node with the given value and insert it before the node at the specified index. We handle cases where the index is at the head or tail separately. We traverse the list to find the node at the previous index, update its next reference, and increment the size.</li>
  <li>Deleting at a Given Index: In the deleteAtIndex method, we remove the node at the specified index. We handle cases where the index is at the head or tail separately. We traverse the list to find the node at the previous index, update its next reference to skip the node to be deleted, and decrement the size.</li>
</ol>

<h2 id="complexity">Complexity</h2>
<ul>
  <li>Time complexity:
    <ul>
      <li>get: O(n), where n is the index of the node being retrieved.</li>
      <li>addAtHead: O(1).</li>
      <li>addAtTail: O(1).</li>
      <li>addAtIndex: O(n), since we may need to traverse the list to find the node at the previous index.</li>
      <li>deleteAtIndex: O(n), since we may need to traverse the list to find the node at the previous index.</li>
    </ul>
  </li>
  <li>Space complexity:
O(1), as we only store references to nodes and do not use additional data structures.</li>
</ul>

<h2 id="code">Code</h2>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">class</span> <span class="nc">ListNode</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">val</span><span class="p">):</span>
        <span class="bp">self</span><span class="p">.</span><span class="n">val</span> <span class="o">=</span> <span class="n">val</span>
        <span class="bp">self</span><span class="p">.</span><span class="nb">next</span> <span class="o">=</span> <span class="bp">None</span>
<span class="k">class</span> <span class="nc">MyLinkedList</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="bp">self</span><span class="p">.</span><span class="n">head</span> <span class="o">=</span> <span class="bp">self</span><span class="p">.</span><span class="n">tail</span> <span class="o">=</span> <span class="bp">None</span>
        <span class="bp">self</span><span class="p">.</span><span class="n">size</span> <span class="o">=</span> <span class="mi">0</span>

    <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">index</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">index</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="p">:</span>
            <span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
        <span class="n">curr</span> <span class="o">=</span> <span class="bp">self</span><span class="p">.</span><span class="n">head</span>
        <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">index</span><span class="p">):</span>
            <span class="n">curr</span> <span class="o">=</span> <span class="n">curr</span><span class="p">.</span><span class="nb">next</span>
        <span class="k">return</span> <span class="n">curr</span><span class="p">.</span><span class="n">val</span>

    <span class="k">def</span> <span class="nf">addAtHead</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="bp">None</span><span class="p">:</span>
        <span class="n">node</span> <span class="o">=</span> <span class="n">ListNode</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="p">.</span><span class="n">head</span><span class="p">:</span>
            <span class="bp">self</span><span class="p">.</span><span class="n">head</span> <span class="o">=</span> <span class="bp">self</span><span class="p">.</span><span class="n">tail</span> <span class="o">=</span> <span class="n">node</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">node</span><span class="p">.</span><span class="nb">next</span> <span class="o">=</span> <span class="bp">self</span><span class="p">.</span><span class="n">head</span>
            <span class="bp">self</span><span class="p">.</span><span class="n">head</span> <span class="o">=</span> <span class="n">node</span>
        <span class="bp">self</span><span class="p">.</span><span class="n">size</span> <span class="o">+=</span> <span class="mi">1</span>

    <span class="k">def</span> <span class="nf">addAtTail</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="bp">None</span><span class="p">:</span>
        <span class="n">node</span> <span class="o">=</span> <span class="n">ListNode</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="p">.</span><span class="n">head</span><span class="p">:</span>
            <span class="bp">self</span><span class="p">.</span><span class="n">head</span> <span class="o">=</span> <span class="bp">self</span><span class="p">.</span><span class="n">tail</span> <span class="o">=</span> <span class="n">node</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="bp">self</span><span class="p">.</span><span class="n">tail</span><span class="p">.</span><span class="nb">next</span> <span class="o">=</span> <span class="n">node</span>
            <span class="bp">self</span><span class="p">.</span><span class="n">tail</span> <span class="o">=</span> <span class="n">node</span>
        <span class="bp">self</span><span class="p">.</span><span class="n">size</span> <span class="o">+=</span> <span class="mi">1</span>

    <span class="k">def</span> <span class="nf">addAtIndex</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">val</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="bp">None</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">index</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">index</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="p">:</span>
            <span class="k">return</span>
        <span class="k">if</span> <span class="n">index</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
            <span class="bp">self</span><span class="p">.</span><span class="n">addAtHead</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
        <span class="k">elif</span> <span class="n">index</span> <span class="o">==</span> <span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="p">:</span>
            <span class="bp">self</span><span class="p">.</span><span class="n">addAtTail</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">node</span> <span class="o">=</span> <span class="n">ListNode</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
            <span class="n">curr</span> <span class="o">=</span> <span class="bp">self</span><span class="p">.</span><span class="n">head</span>
            <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">index</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
                <span class="n">curr</span> <span class="o">=</span> <span class="n">curr</span><span class="p">.</span><span class="nb">next</span>
            <span class="n">node</span><span class="p">.</span><span class="nb">next</span> <span class="o">=</span> <span class="n">curr</span><span class="p">.</span><span class="nb">next</span>
            <span class="n">curr</span><span class="p">.</span><span class="nb">next</span> <span class="o">=</span> <span class="n">node</span>
            <span class="bp">self</span><span class="p">.</span><span class="n">size</span> <span class="o">+=</span><span class="mi">1</span>

    <span class="k">def</span> <span class="nf">deleteAtIndex</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="bp">None</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">index</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">index</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="p">:</span>
            <span class="k">return</span>
        <span class="k">if</span> <span class="n">index</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
            <span class="k">if</span> <span class="bp">self</span><span class="p">.</span><span class="n">size</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
                <span class="bp">self</span><span class="p">.</span><span class="n">head</span> <span class="o">=</span> <span class="bp">self</span><span class="p">.</span><span class="n">tail</span> <span class="o">=</span> <span class="bp">None</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="bp">self</span><span class="p">.</span><span class="n">head</span> <span class="o">=</span> <span class="bp">self</span><span class="p">.</span><span class="n">head</span><span class="p">.</span><span class="nb">next</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">curr</span> <span class="o">=</span> <span class="bp">self</span><span class="p">.</span><span class="n">head</span>
            <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">index</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
                <span class="n">curr</span> <span class="o">=</span> <span class="n">curr</span><span class="p">.</span><span class="nb">next</span>
            <span class="k">if</span> <span class="n">curr</span><span class="p">.</span><span class="nb">next</span> <span class="o">==</span> <span class="bp">self</span><span class="p">.</span><span class="n">tail</span><span class="p">:</span>
                <span class="bp">self</span><span class="p">.</span><span class="n">tail</span> <span class="o">=</span> <span class="n">curr</span>
            <span class="n">curr</span><span class="p">.</span><span class="nb">next</span> <span class="o">=</span> <span class="n">curr</span><span class="p">.</span><span class="nb">next</span><span class="p">.</span><span class="nb">next</span>
        <span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="o">-=</span><span class="mi">1</span>
</code></pre></div></div>

<hr />

<h1 id="2-doubly-linked-list">2. Doubly Linked List</h1>
<h2 id="intuition-1">Intuition</h2>
<p>Implementing a doubly linked list. Each node contains a value (val), a reference to the next node (next), and a reference to the previous node (prev). We’ll consider methods for adding, getting, and deleting nodes from the list.</p>

<h2 id="approach-1">Approach</h2>
<ol>
  <li>Initialization: In the <strong>init</strong> method of MyLinkedList, we initialize the linked list with a head, a tail, and a size.</li>
  <li>Getting a Node: In the get method, we traverse the linked list until we reach the desired index and return the value of that node. If the index is invalid, we return -1.</li>
  <li>Adding at the Head: In the addAtHead method, we create a new node with the given value and update the head to point to this new node. If the list is empty, we also update the tail. We increment the size.</li>
  <li>Adding at the Tail: In the addAtTail method, we create a new node with the given value and update the previous reference of the current tail to point to this new node. We then update the tail to be this new node and increment the size.</li>
  <li>Adding at a Given Index: In the addAtIndex method, we create a new node with the given value and insert it before the node at the specified index. We handle cases where the index is at the head or tail separately. We traverse the list to find the node at the previous index, update its next reference, and increment the size.</li>
  <li>Deleting at a Given Index: In the deleteAtIndex method, we remove the node at the specified index. We handle cases where the index is at the head or tail separately. We traverse the list to find the node at the previous index, update its next reference to skip the node to be deleted, and decrement the size.</li>
</ol>

<h2 id="complexity-1">Complexity</h2>
<ul>
  <li>Time complexity:
    <ul>
      <li>get: O(n), where n is the index of the node being retrieved.</li>
      <li>addAtHead: O(1).</li>
      <li>addAtTail: O(1).</li>
      <li>addAtIndex: O(n), since we may need to traverse the list to find the node at the previous index.</li>
      <li>deleteAtIndex: O(n), since we may need to traverse the list to find the node at the previous index.</li>
    </ul>
  </li>
  <li>Space complexity:
O(1), as we only store references to nodes and do not use additional data structures.</li>
</ul>

<h2 id="code-1">Code</h2>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">class</span> <span class="nc">ListNode</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="p">):</span>
        <span class="bp">self</span><span class="p">.</span><span class="n">prev</span> <span class="o">=</span> <span class="bp">None</span>
        <span class="bp">self</span><span class="p">.</span><span class="n">val</span> <span class="o">=</span> <span class="n">val</span>
        <span class="bp">self</span><span class="p">.</span><span class="nb">next</span> <span class="o">=</span> <span class="bp">None</span>
<span class="k">class</span> <span class="nc">MyLinkedList</span><span class="p">:</span>

    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="bp">self</span><span class="p">.</span><span class="n">head</span> <span class="o">=</span> <span class="bp">self</span><span class="p">.</span><span class="n">tail</span> <span class="o">=</span> <span class="bp">None</span>
        <span class="bp">self</span><span class="p">.</span><span class="n">size</span> <span class="o">=</span> <span class="mi">0</span>

    <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">index</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">index</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="p">:</span>
            <span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
        <span class="n">curr</span> <span class="o">=</span> <span class="bp">self</span><span class="p">.</span><span class="n">head</span>
        <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">index</span><span class="p">):</span>
            <span class="n">curr</span> <span class="o">=</span> <span class="n">curr</span><span class="p">.</span><span class="nb">next</span>
        <span class="k">return</span> <span class="n">curr</span><span class="p">.</span><span class="n">val</span>

    <span class="k">def</span> <span class="nf">addAtHead</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="bp">None</span><span class="p">:</span>
        <span class="n">node</span> <span class="o">=</span> <span class="n">ListNode</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="p">.</span><span class="n">head</span><span class="p">:</span>
            <span class="bp">self</span><span class="p">.</span><span class="n">head</span> <span class="o">=</span> <span class="bp">self</span><span class="p">.</span><span class="n">tail</span> <span class="o">=</span> <span class="n">node</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">node</span><span class="p">.</span><span class="nb">next</span> <span class="o">=</span> <span class="bp">self</span><span class="p">.</span><span class="n">head</span>
            <span class="bp">self</span><span class="p">.</span><span class="n">head</span><span class="p">.</span><span class="n">prev</span> <span class="o">=</span> <span class="n">node</span>
            <span class="bp">self</span><span class="p">.</span><span class="n">head</span> <span class="o">=</span> <span class="n">node</span>
        <span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="o">+=</span><span class="mi">1</span>

    <span class="k">def</span> <span class="nf">addAtTail</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="bp">None</span><span class="p">:</span>
        <span class="n">node</span> <span class="o">=</span> <span class="n">ListNode</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="p">.</span><span class="n">head</span><span class="p">:</span>
            <span class="bp">self</span><span class="p">.</span><span class="n">head</span> <span class="o">=</span> <span class="bp">self</span><span class="p">.</span><span class="n">tail</span> <span class="o">=</span> <span class="n">node</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">node</span><span class="p">.</span><span class="n">prev</span> <span class="o">=</span> <span class="bp">self</span><span class="p">.</span><span class="n">tail</span>
            <span class="bp">self</span><span class="p">.</span><span class="n">tail</span><span class="p">.</span><span class="nb">next</span> <span class="o">=</span> <span class="n">node</span>
            <span class="bp">self</span><span class="p">.</span><span class="n">tail</span> <span class="o">=</span> <span class="n">node</span>
        <span class="bp">self</span><span class="p">.</span><span class="n">size</span> <span class="o">+=</span> <span class="mi">1</span>

    <span class="k">def</span> <span class="nf">addAtIndex</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">val</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="bp">None</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">index</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">index</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="p">:</span>
            <span class="k">return</span>
        <span class="k">if</span> <span class="n">index</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
            <span class="bp">self</span><span class="p">.</span><span class="n">addAtHead</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
        <span class="k">elif</span> <span class="n">index</span> <span class="o">==</span> <span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="p">:</span>
            <span class="bp">self</span><span class="p">.</span><span class="n">addAtTail</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">node</span> <span class="o">=</span> <span class="n">ListNode</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
            <span class="n">curr</span> <span class="o">=</span> <span class="bp">self</span><span class="p">.</span><span class="n">head</span>
            <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">index</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
                <span class="n">curr</span> <span class="o">=</span> <span class="n">curr</span><span class="p">.</span><span class="nb">next</span>
            <span class="n">node</span><span class="p">.</span><span class="n">prev</span> <span class="o">=</span> <span class="n">curr</span>
            <span class="n">node</span><span class="p">.</span><span class="nb">next</span> <span class="o">=</span> <span class="n">curr</span><span class="p">.</span><span class="nb">next</span>
            <span class="n">curr</span><span class="p">.</span><span class="nb">next</span> <span class="o">=</span> <span class="n">node</span>
            <span class="bp">self</span><span class="p">.</span><span class="n">size</span> <span class="o">+=</span> <span class="mi">1</span>

    <span class="k">def</span> <span class="nf">deleteAtIndex</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="bp">None</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">index</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">index</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="p">:</span>
            <span class="k">return</span>
        <span class="k">if</span> <span class="n">index</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="p">.</span><span class="n">head</span><span class="p">:</span>
                <span class="bp">self</span><span class="p">.</span><span class="n">head</span> <span class="o">=</span> <span class="bp">self</span><span class="p">.</span><span class="n">tail</span> <span class="o">=</span> <span class="bp">None</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="bp">self</span><span class="p">.</span><span class="n">head</span> <span class="o">=</span> <span class="bp">self</span><span class="p">.</span><span class="n">head</span><span class="p">.</span><span class="nb">next</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">curr</span> <span class="o">=</span> <span class="bp">self</span><span class="p">.</span><span class="n">head</span>
            <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">index</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
                <span class="n">curr</span> <span class="o">=</span> <span class="n">curr</span><span class="p">.</span><span class="nb">next</span>
            <span class="k">if</span> <span class="n">curr</span><span class="p">.</span><span class="nb">next</span> <span class="o">==</span> <span class="bp">self</span><span class="p">.</span><span class="n">tail</span><span class="p">:</span>
                <span class="bp">self</span><span class="p">.</span><span class="n">tail</span> <span class="o">=</span> <span class="n">curr</span>
                <span class="bp">self</span><span class="p">.</span><span class="n">tail</span><span class="p">.</span><span class="nb">next</span> <span class="o">=</span> <span class="bp">None</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">temp</span> <span class="o">=</span> <span class="n">curr</span><span class="p">.</span><span class="nb">next</span><span class="p">.</span><span class="nb">next</span>
                <span class="n">curr</span><span class="p">.</span><span class="nb">next</span> <span class="o">=</span> <span class="n">curr</span><span class="p">.</span><span class="nb">next</span><span class="p">.</span><span class="nb">next</span>
                <span class="n">temp</span><span class="p">.</span><span class="n">prev</span> <span class="o">=</span> <span class="n">curr</span>
        <span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="o">-=</span><span class="mi">1</span>
</code></pre></div></div>]]></content><author><name>Pavan Badempet</name></author><category term="[&quot;DSA&quot;]" /><category term="LeetCode" /><summary type="html"><![CDATA[Problem Link: 707. Design Linked List]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://pavanbadempet.gitlab.io/assets/img/blog/LeetCode.jpg" /><media:content medium="image" url="https://pavanbadempet.gitlab.io/assets/img/blog/LeetCode.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">1935. Maximum Number of Words You Can Type</title><link href="https://pavanbadempet.gitlab.io/dsa/2024/04/22/1935-Maximum-Number-of-Words-You-Can-Type/" rel="alternate" type="text/html" title="1935. Maximum Number of Words You Can Type" /><published>2024-04-22T00:00:00+00:00</published><updated>2024-04-22T00:00:00+00:00</updated><id>https://pavanbadempet.gitlab.io/dsa/2024/04/22/1935-Maximum-Number-of%20Words-You-Can-Type</id><content type="html" xml:base="https://pavanbadempet.gitlab.io/dsa/2024/04/22/1935-Maximum-Number-of-Words-You-Can-Type/"><![CDATA[<p>Problem Link: <a href="https://leetcode.com/problems/maximum-number-of-words-you-can-type/description/">1935. Maximum Number of Words You Can Type</a></p>

<h1 id="intuition">Intuition</h1>
<p>We can solve this problem by splitting the string on space and iterating through each word. For each word, we iterate through the characters of the broken letters. If any character from the broken letters is found in the current word, we skip that word. If none of the characters from the broken letters are found in the word, we count it as a word that can be typed. Finally, we return the count of such words.</p>

<h1 id="approach">Approach</h1>
<ol>
  <li>Initialize a variable count to store the count of words that can be typed.</li>
  <li>Split the input text into individual words using the space character as the delimiter.</li>
  <li>Iterate through each word w in the list of words:
    <ul>
      <li>Iterate through each character i in the set of broken letters:</li>
      <li>If i is found in the current word w, break out of the inner loop.</li>
      <li>If the inner loop completes without breaking (i.e., none of the broken letters are found in the current word), increment count.</li>
    </ul>
  </li>
  <li>Return count.</li>
</ol>

<h1 id="complexity">Complexity</h1>
<ul>
  <li>
    <p>Time complexity:
O(n * m), where n is the number of words in the text and m is the length of the broken letters string. The function iterates through each word in the text and checks each character against the broken letters.</p>
  </li>
  <li>
    <p>Space complexity:
O(1), as the function uses only a constant amount of extra space.</p>
  </li>
</ul>

<h1 id="code">Code</h1>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">canBeTypedWords</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">brokenLetters</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="k">for</span> <span class="n">w</span> <span class="ow">in</span> <span class="n">text</span><span class="p">.</span><span class="n">split</span><span class="p">(</span><span class="s">" "</span><span class="p">):</span>
            <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">brokenLetters</span><span class="p">:</span>
                <span class="k">if</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">w</span><span class="p">:</span>
                    <span class="k">break</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">count</span><span class="o">+=</span><span class="mi">1</span>
        <span class="k">return</span> <span class="n">count</span>
        
</code></pre></div></div>]]></content><author><name>Pavan Badempet</name></author><category term="[&quot;DSA&quot;]" /><category term="LeetCode" /><summary type="html"><![CDATA[Problem Link: 1935. Maximum Number of Words You Can Type]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://pavanbadempet.gitlab.io/assets/img/blog/LeetCode.jpg" /><media:content medium="image" url="https://pavanbadempet.gitlab.io/assets/img/blog/LeetCode.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">3120. Count the Number of Special Characters I</title><link href="https://pavanbadempet.gitlab.io/dsa/2024/04/21/3120-Count-the-Number-of-Special-Characters-I/" rel="alternate" type="text/html" title="3120. Count the Number of Special Characters I" /><published>2024-04-21T00:00:00+00:00</published><updated>2024-04-21T00:00:00+00:00</updated><id>https://pavanbadempet.gitlab.io/dsa/2024/04/21/3120-Count-the-Number-of-Special-Characters-I</id><content type="html" xml:base="https://pavanbadempet.gitlab.io/dsa/2024/04/21/3120-Count-the-Number-of-Special-Characters-I/"><![CDATA[<p>Problem Link: <a href="https://leetcode.com/problems/count-the-number-of-special-characters-i/description/">3120. Count the Number of Special Characters I</a></p>

<h1 id="intuition">Intuition</h1>
<p>To count the number of special characters in the given word, we first convert the word into a set to obtain unique characters. Then, we initialize an empty set to keep track of the lowercase versions of characters encountered. We iterate through each unique character in the set, converting it to lowercase. If the lowercase character is not present in the tracking set, we add it. If it’s already present, indicating that both lowercase and uppercase versions exist, we remove it from the tracking set and increment the count of special characters. Finally, we return the count of special characters. This approach ensures that each special character is counted only once, regardless of its case.</p>

<h1 id="approach">Approach</h1>
<ol>
  <li>Convert the input word into a set w to get unique characters.</li>
  <li>Initialize an empty set a to keep track of the lowercase versions of characters encountered.</li>
  <li>Initialize a variable count to store the count of special characters.</li>
  <li>Iterate through each character i in the set w.
    <ul>
      <li>Convert i to lowercase and store it in the variable p.</li>
      <li>If p is not in set a, add it to set a.</li>
      <li>If p is already in set a, remove it and increment count.</li>
    </ul>
  </li>
  <li>Return count.
    <h1 id="complexity">Complexity</h1>
    <ul>
      <li>Time complexity:
Time complexity: O(n), where n is the length of the word. The function iterates through each character of the word once.</li>
    </ul>
  </li>
</ol>

<ul>
  <li>Space complexity:
Space complexity: O(n), where n is the number of unique characters in the word. This is because we use sets w and a to store unique characters.</li>
</ul>

<h1 id="code">Code</h1>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">numberOfSpecialChars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">word</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">w</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">word</span><span class="p">)</span>
        <span class="n">a</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
        <span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">w</span><span class="p">:</span>
            <span class="n">p</span> <span class="o">=</span> <span class="n">i</span><span class="p">.</span><span class="n">lower</span><span class="p">()</span>
            <span class="k">if</span> <span class="n">p</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">a</span><span class="p">:</span>
                <span class="n">a</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">a</span><span class="p">.</span><span class="n">remove</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
                <span class="n">count</span><span class="o">+=</span><span class="mi">1</span>
        <span class="k">return</span> <span class="n">count</span>
</code></pre></div></div>]]></content><author><name>Pavan Badempet</name></author><category term="[&quot;DSA&quot;]" /><category term="LeetCode" /><summary type="html"><![CDATA[Problem Link: 3120. Count the Number of Special Characters I]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://pavanbadempet.gitlab.io/assets/img/blog/LeetCode.jpg" /><media:content medium="image" url="https://pavanbadempet.gitlab.io/assets/img/blog/LeetCode.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">3121. Count the Number of Special Characters II</title><link href="https://pavanbadempet.gitlab.io/dsa/2024/04/21/3121-Count-the-Number-of-Special-Characters-II/" rel="alternate" type="text/html" title="3121. Count the Number of Special Characters II" /><published>2024-04-21T00:00:00+00:00</published><updated>2024-04-21T00:00:00+00:00</updated><id>https://pavanbadempet.gitlab.io/dsa/2024/04/21/3121-Count-the-Number-of-Special-Characters-II</id><content type="html" xml:base="https://pavanbadempet.gitlab.io/dsa/2024/04/21/3121-Count-the-Number-of-Special-Characters-II/"><![CDATA[<p>Problem Link: <a href="https://leetcode.com/problems/count-the-number-of-special-characters-ii/description/">3121. Count the Number of Special Characters II</a></p>

<h1 id="intuition">Intuition</h1>
<p>To count the number of special characters in the given word, we initialize an empty dictionary to track the occurrences of each character and a counter variable to store the count of special characters. Iterating through each character in the word, we check if its lowercase version is not present in the dictionary or its corresponding value is not “NA”. If the character is a lowercase letter, we mark its presence in the dictionary. If it’s an uppercase letter and its lowercase version exists in the dictionary with the value “Yes”, we increment the counter and mark it as encountered. Otherwise, we mark it as encountered and decrement the counter. Finally, we return the counter, which represents the count of special characters in the word. This approach ensures that each special character is counted only once, regardless of its case.</p>

<h1 id="approach">Approach</h1>
<ol>
  <li>Initialize an empty dictionary dic to keep track of the occurrences of each character.</li>
  <li>Initialize a variable count to store the count of special characters.</li>
  <li>Iterate through each character i in the word.
    <ul>
      <li>If the lowercase version of i is not in the dictionary or its value is not “NA”:</li>
      <li>If i is a lowercase letter, set its value in the dictionary to “Yes” if it doesn’t exist.</li>
      <li>If i is an uppercase letter:
        <ul>
          <li>If the lowercase version of i exists in the dictionary and its value is “Yes”, increment count and set its value in the dictionary to “NA”.</li>
        </ul>
      </li>
      <li>Otherwise, set its value in the dictionary to “NA” and decrement count.</li>
    </ul>
  </li>
  <li>Return count.
    <h1 id="complexity">Complexity</h1>
    <ul>
      <li>Time complexity:
O(n), where n is the length of the input word. The function iterates through each character once.</li>
    </ul>
  </li>
</ol>

<ul>
  <li>Space complexity:
O(n), where n is the number of unique characters in the word. This is because we use a dictionary dic to store the occurrences of each character.</li>
</ul>

<h1 id="code">Code</h1>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">numberOfSpecialChars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">word</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">dic</span> <span class="o">=</span> <span class="p">{}</span>
        <span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">word</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">dic</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">i</span><span class="p">.</span><span class="n">lower</span><span class="p">(),</span><span class="bp">True</span><span class="p">)</span><span class="o">!=</span><span class="s">"NA"</span><span class="p">:</span>
                <span class="k">if</span> <span class="s">'a'</span><span class="o">&lt;=</span><span class="n">i</span><span class="o">&lt;=</span><span class="s">'z'</span><span class="p">:</span>
                    <span class="k">if</span> <span class="ow">not</span> <span class="n">dic</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">i</span><span class="p">,</span><span class="bp">False</span><span class="p">):</span>
                        <span class="n">dic</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="s">"Yes"</span>
                    <span class="k">else</span><span class="p">:</span>
                        <span class="k">if</span> <span class="n">dic</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="s">"No"</span><span class="p">:</span>
                            <span class="n">dic</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="s">"NA"</span>
                            <span class="n">count</span><span class="o">-=</span><span class="mi">1</span>
                <span class="k">else</span><span class="p">:</span>
                    <span class="n">p</span> <span class="o">=</span> <span class="n">i</span><span class="p">.</span><span class="n">lower</span><span class="p">()</span>
                    <span class="k">if</span> <span class="n">dic</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">p</span><span class="p">,</span><span class="bp">False</span><span class="p">):</span>
                        <span class="k">if</span> <span class="n">dic</span><span class="p">[</span><span class="n">p</span><span class="p">]</span><span class="o">!=</span><span class="s">"No"</span><span class="p">:</span>
                            <span class="n">count</span><span class="o">+=</span><span class="mi">1</span>
                            <span class="n">dic</span><span class="p">[</span><span class="n">p</span><span class="p">]</span> <span class="o">=</span> <span class="s">"No"</span>
                    <span class="k">else</span><span class="p">:</span>
                        <span class="n">dic</span><span class="p">[</span><span class="n">p</span><span class="p">]</span> <span class="o">=</span> <span class="s">"NA"</span>
        <span class="k">return</span> <span class="n">count</span>
</code></pre></div></div>]]></content><author><name>Pavan Badempet</name></author><category term="[&quot;DSA&quot;]" /><category term="LeetCode" /><summary type="html"><![CDATA[Problem Link: 3121. Count the Number of Special Characters II]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://pavanbadempet.gitlab.io/assets/img/blog/LeetCode.jpg" /><media:content medium="image" url="https://pavanbadempet.gitlab.io/assets/img/blog/LeetCode.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">748. Shortest Completing Word</title><link href="https://pavanbadempet.gitlab.io/dsa/2024/04/20/748-Shortest-Completing-Word/" rel="alternate" type="text/html" title="748. Shortest Completing Word" /><published>2024-04-20T00:00:00+00:00</published><updated>2024-04-20T00:00:00+00:00</updated><id>https://pavanbadempet.gitlab.io/dsa/2024/04/20/748-Shortest-Completing-Word</id><content type="html" xml:base="https://pavanbadempet.gitlab.io/dsa/2024/04/20/748-Shortest-Completing-Word/"><![CDATA[<p>Problem Link: <a href="https://leetcode.com/problems/shortest-completing-word/description/">748. Shortest Completing Word</a></p>

<h1 id="intuition">Intuition</h1>
<p>First creating a character count for the cleaned and lowercased characters of the license plate. Then, each word in the given list is iterated through, and for each word, another character count is created. It’s checked if the word contains all the characters from the license plate. If so, and if it’s shorter than the current shortest completing word found so far, it becomes the new shortest completing word. Finally, the shortest completing word found is returned as the solution.</p>

<h1 id="approach">Approach</h1>
<ol>
  <li>Create a Counter object valid for the cleaned and lowercased characters of the license plate, containing only alphabetic characters.</li>
  <li>Initialize an empty string ans to store the shortest completing word found so far.</li>
  <li>Iterate through each word i in the list words.
    <ul>
      <li>Create a Counter object j for the characters of the current word i.</li>
      <li>Check if the count of each character in valid is less than or equal to the count of the same character in j.</li>
      <li>If the current word i contains all the characters from the license plate, and it is shorter than the current ans, update ans to be i.</li>
    </ul>
  </li>
  <li>Return the shortest completing word found.</li>
</ol>

<h1 id="complexity">Complexity</h1>
<ul>
  <li>
    <p>Time complexity:
O(m * (k + n)), constructing the valid counter from the licensePlate incurs a linear runtime of O(n), where n represents the length of the licensePlate string. Subsequently, iterating through each word in the words list adds complexity proportional to the number of words, denoted as m. Within each iteration, generating a counter for the current word takes O(k) time, where k denotes the length of the word. Moreover, verifying whether the word contains sufficient occurrences of each character from the valid counter extends the time complexity to O(n) for each word.</p>
  </li>
  <li>
    <p>Space complexity:
O(n + k), valid counter requires O(n) space, where n denotes the count of unique characters in the licensePlate string. Additionally, the space consumption includes the ans string, necessitating O(k) space, corresponding to the length of the shortest completing word. Moreover, the creation of a new counter j for each word within the iteration further contributes O(k) space per word, where k signifies the length of the respective word.</p>
  </li>
</ul>

<h1 id="code">Code</h1>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">Counter</span>
<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">shortestCompletingWord</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">licensePlate</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">words</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
        <span class="n">valid</span> <span class="o">=</span> <span class="n">Counter</span><span class="p">(</span><span class="s">""</span><span class="p">.</span><span class="n">join</span><span class="p">(</span><span class="n">x</span><span class="p">.</span><span class="n">lower</span><span class="p">()</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">licensePlate</span> <span class="k">if</span> <span class="n">x</span><span class="p">.</span><span class="n">isalpha</span><span class="p">()))</span>
        <span class="n">ans</span> <span class="o">=</span> <span class="s">""</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">words</span><span class="p">:</span>
            <span class="n">j</span> <span class="o">=</span> <span class="n">Counter</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
            <span class="k">if</span> <span class="nb">all</span><span class="p">(</span><span class="n">j</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">c</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="n">valid</span><span class="p">[</span><span class="n">c</span><span class="p">]</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">valid</span><span class="p">):</span>
                <span class="k">if</span> <span class="ow">not</span> <span class="n">ans</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">i</span><span class="p">)</span><span class="o">&lt;</span><span class="nb">len</span><span class="p">(</span><span class="n">ans</span><span class="p">):</span>
                    <span class="n">ans</span> <span class="o">=</span> <span class="n">i</span>
        <span class="k">return</span> <span class="n">ans</span>
</code></pre></div></div>]]></content><author><name>Pavan Badempet</name></author><category term="[&quot;DSA&quot;]" /><category term="LeetCode" /><summary type="html"><![CDATA[Problem Link: 748. Shortest Completing Word]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://pavanbadempet.gitlab.io/assets/img/blog/LeetCode.jpg" /><media:content medium="image" url="https://pavanbadempet.gitlab.io/assets/img/blog/LeetCode.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">1859. Sorting the Sentence</title><link href="https://pavanbadempet.gitlab.io/dsa/2024/04/19/1859-Sorting-the-Sentence/" rel="alternate" type="text/html" title="1859. Sorting the Sentence" /><published>2024-04-19T00:00:00+00:00</published><updated>2024-04-19T00:00:00+00:00</updated><id>https://pavanbadempet.gitlab.io/dsa/2024/04/19/1859-Sorting-the-Sentence</id><content type="html" xml:base="https://pavanbadempet.gitlab.io/dsa/2024/04/19/1859-Sorting-the-Sentence/"><![CDATA[<p>Problem Link: <a href="https://leetcode.com/problems/sorting-the-sentence/description/">1859. Sorting the Sentence</a></p>

<h1 id="intuition">Intuition</h1>
<p>Splitting the input sentence into individual words and initializing an empty list with the same length as the number of words. Iterating through each word, the last character, representing its position in the sorted sentence, is extracted. By converting this character to an integer and adjusting for zero-based indexing, each word is placed in its corresponding position in the output list. Finally, the words in the output list are joined with spaces to form the sorted sentence, which is then returned.</p>

<h1 id="approach">Approach</h1>
<ol>
  <li>Split the input sentence s into individual words using the space character as the delimiter.</li>
  <li>Initialize a list ans with empty strings, where the length of the list is equal to the number of words in the sentence.</li>
  <li>Iterate through each word w in the list of words:
    <ul>
      <li>Extract the last character of the word, which represents its position in the sorted sentence.</li>
      <li>Convert the position character to an integer and subtract 1 (since Python indexing starts from 0).</li>
      <li>Assign the word (excluding its last character) to the corresponding position in the ans list.</li>
    </ul>
  </li>
  <li>Join the words in the ans list with spaces to form the sorted sentence and return it.</li>
</ol>

<h1 id="complexity">Complexity</h1>
<ul>
  <li>
    <p>Time complexity:
O(n), where n is the number of words in the sentence s. The function iterates through each word once.</p>
  </li>
  <li>
    <p>Space complexity:
O(n), where n is the number of words in the sentence s. This is because we create a list ans to store the sorted words.</p>
  </li>
</ul>

<h1 id="code">Code</h1>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">sortSentence</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
        <span class="n">words</span> <span class="o">=</span> <span class="n">s</span><span class="p">.</span><span class="n">split</span><span class="p">(</span><span class="s">" "</span><span class="p">)</span>
        <span class="n">ans</span> <span class="o">=</span> <span class="p">[</span><span class="s">""</span><span class="p">]</span><span class="o">*</span><span class="nb">len</span><span class="p">(</span><span class="n">words</span><span class="p">)</span>
        <span class="k">for</span> <span class="n">w</span> <span class="ow">in</span> <span class="n">words</span><span class="p">:</span>
            <span class="n">ans</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">w</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">w</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
        <span class="k">return</span> <span class="s">" "</span><span class="p">.</span><span class="n">join</span><span class="p">(</span><span class="n">ans</span><span class="p">)</span>
            
</code></pre></div></div>]]></content><author><name>Pavan Badempet</name></author><category term="[&quot;DSA&quot;]" /><category term="LeetCode" /><summary type="html"><![CDATA[Problem Link: 1859. Sorting the Sentence]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://pavanbadempet.gitlab.io/assets/img/blog/LeetCode.jpg" /><media:content medium="image" url="https://pavanbadempet.gitlab.io/assets/img/blog/LeetCode.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">1880. Check if Word Equals Summation of Two Words</title><link href="https://pavanbadempet.gitlab.io/dsa/2024/04/15/1880-Check-if-Word-Equals-Summation-of-Two-Words/" rel="alternate" type="text/html" title="1880. Check if Word Equals Summation of Two Words" /><published>2024-04-15T00:00:00+00:00</published><updated>2024-04-15T00:00:00+00:00</updated><id>https://pavanbadempet.gitlab.io/dsa/2024/04/15/1880-Check-if-Word-Equals-Summation-of-Two-Words</id><content type="html" xml:base="https://pavanbadempet.gitlab.io/dsa/2024/04/15/1880-Check-if-Word-Equals-Summation-of-Two-Words/"><![CDATA[<p>Problem Link: <a href="https://leetcode.com/problems/check-if-word-equals-summation-of-two-words/description/">1880. Check if Word Equals Summation of Two Words</a></p>

<h3 id="intuition">Intuition</h3>
<p>Calculate the numerical values of three given words by converting each character to its ASCII value and summing them up. Then, check if the sum of the first two words equals the numerical value of the third word.</p>

<h3 id="approach">Approach</h3>
<ol>
  <li>Initialize variables fw, sw, and tw to represent the numerical values of firstWord, secondWord, and targetWord, respectively.</li>
  <li>Iterate through the maximum length of the three words using a loop index i.
    <ul>
      <li>If i is within the length of firstWord, convert the character at index i to its numerical value using ASCII conversion and update fw.</li>
      <li>If i is within the length of secondWord, convert the character at index i to its numerical value using ASCII conversion and update sw.</li>
      <li>If i is within the length of targetWord, convert the character at index i to its numerical value using ASCII conversion and update tw.</li>
    </ul>
  </li>
  <li>Check if the sum of fw and sw is equal to tw.</li>
  <li>Return True if the sum is equal, otherwise return False.</li>
</ol>

<h3 id="complexity">Complexity</h3>
<ul>
  <li>
    <p>Time complexity:
O(n), where n is the maximum length among the lengths of firstWord, secondWord, and targetWord. The function iterates through each character of the longest word once.</p>
  </li>
  <li>
    <p>Space complexity:
O(1), as the function uses only a constant amount of extra space.</p>
  </li>
</ul>

<h3 id="code">Code</h3>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">isSumEqual</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">firstWord</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">secondWord</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">targetWord</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        <span class="n">fw</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="n">sw</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="n">tw</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">firstWord</span><span class="p">),</span><span class="nb">len</span><span class="p">(</span><span class="n">secondWord</span><span class="p">),</span><span class="nb">len</span><span class="p">(</span><span class="n">targetWord</span><span class="p">))):</span>
            <span class="k">if</span> <span class="n">i</span><span class="o">&lt;=</span><span class="nb">len</span><span class="p">(</span><span class="n">firstWord</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">:</span>
                <span class="n">fw</span> <span class="o">=</span> <span class="n">fw</span><span class="o">*</span><span class="mi">10</span> <span class="o">+</span> <span class="nb">ord</span><span class="p">(</span><span class="n">firstWord</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">-</span> <span class="nb">ord</span><span class="p">(</span><span class="s">'a'</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">i</span><span class="o">&lt;=</span><span class="nb">len</span><span class="p">(</span><span class="n">secondWord</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">:</span>
                <span class="n">sw</span> <span class="o">=</span> <span class="n">sw</span><span class="o">*</span><span class="mi">10</span> <span class="o">+</span> <span class="nb">ord</span><span class="p">(</span><span class="n">secondWord</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">-</span> <span class="nb">ord</span><span class="p">(</span><span class="s">'a'</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">i</span><span class="o">&lt;=</span><span class="nb">len</span><span class="p">(</span><span class="n">targetWord</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">:</span>
                <span class="n">tw</span> <span class="o">=</span> <span class="n">tw</span><span class="o">*</span><span class="mi">10</span> <span class="o">+</span> <span class="nb">ord</span><span class="p">(</span><span class="n">targetWord</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">-</span> <span class="nb">ord</span><span class="p">(</span><span class="s">'a'</span><span class="p">)</span>
        <span class="k">if</span> <span class="n">fw</span> <span class="o">+</span> <span class="n">sw</span> <span class="o">==</span> <span class="n">tw</span><span class="p">:</span>
            <span class="k">return</span> <span class="bp">True</span>
        <span class="k">return</span> <span class="bp">False</span>
</code></pre></div></div>]]></content><author><name>Pavan Badempet</name></author><category term="[&quot;DSA&quot;]" /><category term="LeetCode" /><summary type="html"><![CDATA[Problem Link: 1880. Check if Word Equals Summation of Two Words]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://pavanbadempet.gitlab.io/assets/img/blog/LeetCode.jpg" /><media:content medium="image" url="https://pavanbadempet.gitlab.io/assets/img/blog/LeetCode.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">551. Student Attendance Record I</title><link href="https://pavanbadempet.gitlab.io/dsa/2024/04/13/551-Student-Attendance-Record-I/" rel="alternate" type="text/html" title="551. Student Attendance Record I" /><published>2024-04-13T00:00:00+00:00</published><updated>2024-04-13T00:00:00+00:00</updated><id>https://pavanbadempet.gitlab.io/dsa/2024/04/13/551-Student-Attendance-Record-I</id><content type="html" xml:base="https://pavanbadempet.gitlab.io/dsa/2024/04/13/551-Student-Attendance-Record-I/"><![CDATA[<p>Problem Link: <a href="https://leetcode.com/problems/student-attendance-record-i/description/">551. Student Attendance Record I</a></p>

<h1 id="intuition">Intuition</h1>
<p>Iterate through the attendance record string, tallying counts for absences and consecutive late days. Track the maximum consecutive late days encountered. At each step, check for conditions violating the attendance criteria, like multiple absences or more than two consecutive late days.</p>

<h1 id="approach">Approach</h1>
<ol>
  <li>Initialize two variables Absent and Late to keep track of the number of absent days and consecutive late days, respectively.</li>
  <li>Iterate through each character i in the string s.
    <ul>
      <li>If i is not ‘L’, reset the Late counter to 0. If i is ‘A’, increment the Absent counter and check if Absent is greater than or equal to 2. If so, return False.</li>
      <li>If i is ‘L’, increment the Late counter and check if Late is greater than or equal to 3. If so, return False.</li>
    </ul>
  </li>
  <li>If the loop completes without returning False, return True.</li>
</ol>

<h1 id="complexity">Complexity</h1>
<ul>
  <li>
    <p>Time complexity:
O(n), where n is the length of the string s. The function iterates through each character of the string once.</p>
  </li>
  <li>
    <p>Space complexity:
O(1), as the function uses only a constant amount of extra space.</p>
  </li>
</ul>

<h1 id="code">Code</h1>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">checkRecord</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        <span class="n">Absent</span><span class="p">,</span> <span class="n">Late</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">s</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="s">'L'</span><span class="p">:</span>
                <span class="n">Late</span><span class="o">=</span><span class="mi">0</span>
                <span class="k">if</span> <span class="n">i</span><span class="o">==</span><span class="s">'A'</span><span class="p">:</span>
                    <span class="n">Absent</span><span class="o">+=</span><span class="mi">1</span>
                    <span class="k">if</span> <span class="n">Absent</span><span class="o">&gt;=</span><span class="mi">2</span><span class="p">:</span>
                        <span class="k">return</span> <span class="bp">False</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">Late</span><span class="o">+=</span><span class="mi">1</span>
                <span class="k">if</span> <span class="n">Late</span><span class="o">&gt;=</span><span class="mi">3</span><span class="p">:</span>
                    <span class="k">return</span> <span class="bp">False</span>
        <span class="k">return</span> <span class="bp">True</span>
</code></pre></div></div>]]></content><author><name>Pavan Badempet</name></author><category term="[&quot;DSA&quot;]" /><category term="LeetCode" /><summary type="html"><![CDATA[Problem Link: 551. Student Attendance Record I]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://pavanbadempet.gitlab.io/assets/img/blog/LeetCode.jpg" /><media:content medium="image" url="https://pavanbadempet.gitlab.io/assets/img/blog/LeetCode.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>