<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[ChicanaCodes]]></title><description><![CDATA[Software engineering, Gen AI, Interview Prep, Breaking into Tech, and random shenanigans relating to tech that I come across and want to write about.]]></description><link>https://chicanacodes.com</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1752623087106/93756e7c-92a5-404b-ab25-a754dc654682.png</url><title>ChicanaCodes</title><link>https://chicanacodes.com</link></image><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 09:23:31 GMT</lastBuildDate><atom:link href="https://chicanacodes.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Week 1: Arrays & Hashmaps – Kicking Off the NeetCode Grind]]></title><description><![CDATA[Ok so this week I tackled the first batch of array and hashmap problems from NeetCode. I went from dreading edge cases to actually enjoying some of the challenges. Still working on speeding up my runtime and trusting my initial instincts and honestly...]]></description><link>https://chicanacodes.com/week-1-arrays-and-hashmaps-kicking-off-the-neetcode-grind</link><guid isPermaLink="true">https://chicanacodes.com/week-1-arrays-and-hashmaps-kicking-off-the-neetcode-grind</guid><category><![CDATA[Python]]></category><category><![CDATA[data structures]]></category><category><![CDATA[algorithms]]></category><category><![CDATA[interview]]></category><category><![CDATA[Technical interview]]></category><dc:creator><![CDATA[chicanacoder]]></dc:creator><pubDate>Wed, 16 Jul 2025 03:34:06 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1752635501548/9d2d33cd-874b-4643-a433-baf86351e0d8.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ok so this week I tackled the first batch of array and hashmap problems from NeetCode. I went from dreading edge cases to actually enjoying some of the challenges. Still working on speeding up my runtime and trusting my initial instincts and honestly I still did struggled through some of the Medium problems like Valid Sudoku. I think I have to take another stab at that one next week.</p>
<p>The problems I did manage to complete were:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1752634906670/67257f52-c7ca-453b-b568-b59d12f90243.png" alt class="image--center mx-auto" /></p>
<p>If you want to take a look at my solutions, you can find my code here:</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://github.com/ChicanaCodes/neetcode-150">https://github.com/ChicanaCodes/neetcode-150</a></div>
<p> </p>
<p>I’m following this strategy every time I start working on a problem.</p>
<ol>
<li><p>I time myself for 60 minutes using a Pomodoro timer - <a target="_blank" href="https://pomodorokitty.com/">https://pomodorokitty.com/</a></p>
</li>
<li><p>I create a function signature and use python doc strings to</p>
<ul>
<li><p>restate the problem</p>
</li>
<li><p>come up with example inputs/outputs</p>
</li>
<li><p>identify edge cases</p>
</li>
<li><p>pseudocode my approach</p>
</li>
<li><p>draw out any data structures I will use during my problem</p>
</li>
</ul>
</li>
</ol>
<pre><code class="lang-python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">group_anagrams</span>(<span class="hljs-params">strs: list[str]</span>) -&gt; list[list[str]]:</span>
    <span class="hljs-string">"""
    Given an array of strings, group the anagrams together
    and return a 2D array of the grouped anagrams.

    Example:
    Input: strs = ["eat","tea","tan","ate","nat","bat"]
    Output: [["bat"],["nat","tan"],["ate","eat","tea"]]

    Edge Cases: 
    - Can there be an empty string?
    - Can there be strings with only one character?
    - Can there be the same string repeated?
    - Can there be null strings?
    - Can the strings have trailing spaces?
    - What to return if there are no anagrams?

    Approach:
    - Create a dictionarty to store the anagrams
    - Iterate through the strings and sort the characters in each string
    - If the sorted string is not in the dictionary, add it as a key and the original string as a value
    - If the sorted string is in the dictionary, add the original string to the value list
    - Return the values of the dictionary as a list of lists

    Sample anagrams for following input: ["eat","tea","tan","ate","nat","bat"]
    {
        "aet": ["eat","tea","ate"],
        "ant": ["tan","nat"],
        "abt": ["bat"]
    }
    """</span>
    <span class="hljs-keyword">pass</span>
</code></pre>
<ol start="3">
<li><p>After writing out the pseudocode, I actually code out my solution and add test cases using Python’s doctest library</p>
</li>
<li><p>As I wrap up my solution I add comments and discus Time and Space complexity of my solution</p>
</li>
<li><p>If I come up with a more optimal solution, I’d update my code and then again discuss the optimizations</p>
</li>
</ol>
<pre><code class="lang-python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">group_anagrams</span>(<span class="hljs-params">strs: list[str]</span>) -&gt; list[list[str]]:</span>
    <span class="hljs-string">"""
    Given an array of strings, group the anagrams together
    and return a 2D array of the grouped anagrams.

    Example:
    Input: strs = ["eat","tea","tan","ate","nat","bat"]
    Output: [["bat"],["nat","tan"],["ate","eat","tea"]]

    Edge Cases: 
    - Can there be an empty string?
    - Can there be strings with only one character?
    - Can there be the same string repeated?
    - Can there be null strings?
    - Can the strings have trailing spaces?
    - What to return if there are no anagrams?

    Approach:
    - Create a dictionarty to store the anagrams
    - Iterate through the strings and sort the characters in each string
    - If the sorted string is not in the dictionary, add it as a key and the original string as a value
    - If the sorted string is in the dictionary, add the original string to the value list
    - Return the values of the dictionary as a list of lists

    &gt;&gt;&gt; group_anagrams(["eat","tea","tan","ate","nat","bat"])
    [['ate', 'eat', 'tea'], ['bat'], ['nat', 'tan']]

    &gt;&gt;&gt; group_anagrams(["x"])
    [['x']]

    &gt;&gt;&gt; group_anagrams(["",""])
    [['', '']]

    &gt;&gt;&gt; group_anagrams(["act","pots","tops","cat","stop","hat"])
    [['act', 'cat'], ['hat'], ['pots', 'stop', 'tops']]

    Sample anagrams for following input: ["eat","tea","tan","ate","nat","bat"]
    {
        "aet": ["eat","tea","ate"],
        "ant": ["tan","nat"],
        "abt": ["bat"]
    }
    """</span>
    anagrams = {}
    <span class="hljs-keyword">for</span> string <span class="hljs-keyword">in</span> strs:
        sorted_string = <span class="hljs-string">''</span>.join(sorted(string))
        <span class="hljs-keyword">if</span> sorted_string <span class="hljs-keyword">in</span> anagrams: 
            anagrams[sorted_string].append(string)
        <span class="hljs-keyword">else</span>:
            anagrams[sorted_string] = [string]

    <span class="hljs-comment"># Sort each group and then sort the list of groups for consistent output</span>
    result = [sorted(group) <span class="hljs-keyword">for</span> group <span class="hljs-keyword">in</span> anagrams.values()]
    result.sort()
    <span class="hljs-keyword">return</span> result

<span class="hljs-comment"># Time complexity: O(n * k log k) - n is the number of strings, k is the length of the longest string</span>
<span class="hljs-comment"># Space complexity: O(n * k) - storing the strings in the dictionary</span>

<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">"__main__"</span>:
    <span class="hljs-keyword">import</span> doctest
    <span class="hljs-keyword">if</span> doctest.testmod().failed == <span class="hljs-number">0</span>:
        print(<span class="hljs-string">"\n** ALL TESTS PASSED. AWESOME WORK! **\n"</span>)
</code></pre>
<p>Although I haven't participated in many coding interviews, I've gained valuable insights from several informational interviews with senior engineers. A significant aspect of the interview process is evaluating how candidates solve problems and articulate their strategies. This involves gathering requirements and identifying edge cases, much like the tasks we perform as software engineers.</p>
<p>I believe I'm starting to grasp the process, and I plan to practice thinking out loud, even if it feels a bit awkward. The more I practice verbalizing my thoughts while tackling these problems, the more natural it will become.</p>
<h2 id="heading-key-takeaways">💡 Key Takeaways</h2>
<ul>
<li><strong>Dictionaries (hashmaps) reduce time complexity</strong> when you need constant-time lookups. They’re game-changers for frequency counts, index tracking, and pairing values (e.g., Two Sum).</li>
</ul>
<ul>
<li><p><strong>Sorting isn’t always the most optimal solution.</strong> While it can simplify some problems (like grouping anagrams), it adds O(n log n) time, which isn’t ideal if you can solve it in O(n) using hashing.</p>
</li>
<li><p><strong>Think about what data structure gives you the fastest access.</strong> If you’re looping + checking something frequently, ask: “Can I store this in a set or dict instead?”</p>
</li>
<li><p><strong>Start with brute force, then optimize.</strong> Sometimes writing the naive solution first helps you identify bottlenecks before jumping to hashmap/set optimizations.</p>
</li>
</ul>
<blockquote>
<p>I still catch myself second-guessing every answer, but I’m trying to focus on consistency over perfection. One problem a day is more progress than no problems a week.</p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[Preparing for Technical Interviews]]></title><description><![CDATA[Alright, so I’ve been putting off the LeetCode grind for far too long. After 5 years as a software engineer, I’ve somehow managed to avoid the dreaded technical interview gauntlet — and I won’t lie, the longer I’ve delayed it, the scarier it’s become...]]></description><link>https://chicanacodes.com/preparing-for-technical-interviews</link><guid isPermaLink="true">https://chicanacodes.com/preparing-for-technical-interviews</guid><category><![CDATA[Technical interview]]></category><category><![CDATA[Python]]></category><category><![CDATA[data structures]]></category><category><![CDATA[algorithms]]></category><dc:creator><![CDATA[chicanacoder]]></dc:creator><pubDate>Tue, 15 Jul 2025 23:42:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1752607287046/9aafd1b4-d4d2-4857-b35a-691359ac4c76.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Alright, so I’ve been putting off the LeetCode grind for far too long. After 5 years as a software engineer, I’ve somehow managed to avoid the dreaded technical interview gauntlet — and I won’t lie, the longer I’ve delayed it, the scarier it’s become. Imposter syndrome, meet your enabler.</p>
<p>But with the current tech landscape being what it is — competitive, unpredictable, and full of “just one more round” interview loops — I know it’s time to face this challenge head-on. No more excuses. I’m committed to giving this prep journey everything I’ve got.</p>
<p>So, I’m kicking off this blog series for three reasons:</p>
<ol>
<li><p><strong>Accountability:</strong> Writing about my journey makes it real.</p>
</li>
<li><p><strong>Knowledge Sharing:</strong> If I find something that works (or definitely doesn’t), I want to pass it on.</p>
</li>
<li><p><strong>Community:</strong> Maybe you’re in the same boat — if so, let’s prep together.  </p>
</li>
</ol>
<hr />
<h2 id="heading-what-im-starting-with"><strong>🔄 What I’m Starting With</strong></h2>
<p>To begin, I’ll be working through the <a target="_blank" href="https://neetcode.io/practice?tab=neetcode150">NeetCode 150 problems</a>. These are categorized by topic and difficulty, and they’ve become a go-to roadmap for interview prep across the board.</p>
<p>As I go, I’ll be documenting my progress, problem-solving strategies, and aha! moments here on the blog and across my social platforms. I’ll also share breakdowns of any particularly tricky problems, either in writing or as short-form videos (because explaining it to others helps me lock it in).</p>
<h2 id="heading-my-technical-interview-prep-roadmap"><strong>🛣️ My Technical Interview Prep Roadmap</strong></h2>
<p>This roadmap isn’t rigid, but it gives me structure and a sense of pace. I’m aiming for ~5–10 problems per week depending on the difficulty and topic.</p>
<p><strong>🧠 Months 1–2: Master the Basics</strong></p>
<ul>
<li><p>Arrays &amp; HashTables</p>
</li>
<li><p>Two Pointers</p>
</li>
<li><p>Sliding Window</p>
</li>
<li><p>Stack &amp; Queue</p>
</li>
</ul>
<p><strong>🌱 Months 3–4: Core Data Structures</strong></p>
<ul>
<li><p>Linked Lists</p>
</li>
<li><p>Binary Search</p>
</li>
<li><p>Trees &amp; Binary Search Trees</p>
</li>
<li><p>Heaps &amp; Priority Queues</p>
</li>
<li><p>Graphs &amp; Traversals</p>
</li>
</ul>
<p><strong>🧩 Month 5: Advanced Topics</strong></p>
<ul>
<li><p>Recursion &amp; Backtracking</p>
</li>
<li><p>Dynamic Programming</p>
</li>
<li><p>Tries &amp; Greedy Algorithms</p>
</li>
</ul>
<p><strong>🧱 Month 6: System Design + Mock Interviews</strong></p>
<ul>
<li><p>Scalable architecture concepts</p>
</li>
<li><p>Real-world design challenges</p>
</li>
<li><p>Whiteboard-style mock interviews</p>
</li>
<li><p>Behavioral &amp; STAR method prep</p>
</li>
</ul>
<h2 id="heading-my-goals-amp-learning-style"><strong>🎯 My Goals &amp; Learning Style</strong></h2>
<p>My goal is to be confident and technically sharp enough to apply to senior-level roles at companies like Google, Airbnb, or Netflix by the end of the year. I’m focusing on Python as my interview language, but will revisit JavaScript if needed for front-end roles.</p>
<p>I tend to learn best when I:</p>
<ul>
<li><p>Write things down by hand</p>
</li>
<li><p>Teach the concept (through a post or a short video)</p>
</li>
<li><p>Solve problems in batches (with breaks to avoid burnout)</p>
</li>
</ul>
<p>So if you see a post from me explaining a concept, know that it’s as much for me as it is for you!  </p>
<hr />
<h2 id="heading-resources-page"><strong>📚 Resources Page</strong></h2>
<p>I’ll be compiling all the tools, courses, cheat sheets, and videos I use on my <a target="_blank" href="https://chicanacodes.com/technical-interview-prep">Resources page</a>, which I’ll update regularly. So if you’re looking for Python templates, Big O cheat sheets, or a sanity-saving visual explanation of dynamic programming, check there first.  </p>
<hr />
<h2 id="heading-lets-do-this-together"><strong>✨ Let’s Do This Together</strong></h2>
<p>If you’ve been putting this off too — whether because of burnout, fear, or just life — I see you. It’s easy to feel overwhelmed or “behind,” but the truth is, the best time to start was yesterday… and the second-best time is today.</p>
<p>Let’s prep together. 💻</p>
<p>Let’s grow together. 🌱</p>
<p>And let’s land that next dream job. 💼</p>
<p>I’ll be posting updates weekly here and on <a target="_blank" href="https://instagram.com/chicanacodes">@ChicanaCodes</a> — feel free to follow along or drop a comment to say hi. If you’re on the same journey, I’d love to cheer you on too.</p>
]]></content:encoded></item></channel></rss>