Essential cookies keep authentication working. With your permission, we also use analytics cookies to understand and improve the product. Read our Privacy Policy

DataEngPrep.tech
QuestionsPracticeAI CoachDashboardPricingBlog
ProLogin
Home/Questions/Python/Coding/Write a Python function to find the first non-repeating character in a string.

Write a Python function to find the first non-repeating character in a string.

Python/Codingeasy2 min read

Reviewed by Aditya Kumar · Last reviewed 2026-03-24

To find the first non repeating character, the most efficient approach is a two pass strategy using a hash map (dictionary) to store character frequencies. Mechanics and Why The solution involves two…

🤖 Analyze Your Answer
Frequency
Low
Asked at 3 companies
Category
179
questions in Python/Coding
Difficulty Split
127E|24M|28H
in this category
Total Bank
1,863
across 7 categories
Asked at these companies
Delivery HeroDunnhumbyFragma Data Systems
Interview Pro Tip

Red Flag: O(n²) solution (nested loops). Pro-Move: 'Counter is readable; for production we'd handle Unicode normalization (NFD) since users expect á and a to match'—shows production edge-case thinking.

Key Concepts Tested
python

Why This Question Matters

This easy-level Python/Coding question appears frequently in data engineering interviews at companies like Delivery Hero, Dunnhumby, Fragma Data Systems. While less common, it tests deeper understanding that distinguishes strong candidates. Mastering the underlying concepts (python) will help you answer variations of this question confidently.

How to Approach This

Start by clearly defining the core concept being asked about. Interviewers want to see that you understand the fundamentals before diving into implementation details. Structure your answer with a definition, then explain the practical application with a concise example. The expert answer includes a code example that demonstrates the implementation pattern.

Expert Answer
454 wordsIncludes code

To find the first non-repeating character, the most efficient approach is a two-pass strategy using a hash map (dictionary) to store character frequencies.

Mechanics and Why

The solution involves two distinct passes over the input string.
  • First Pass (Frequency Count): Iterate through the string once to build a frequency map (e.g., a Python dictionary or collections.Counter). For each character encountered, increment its count in the map. This pass takes O(N) time, where N is the length of the string.
  • Second Pass (Find First Unique): Iterate through the string again, maintaining the original character order. For each character, check its count in the frequency map. The first character encountered with a count of 1 is the answer. If the loop completes without finding such a character, it means no non-repeating character exists. This pass also takes O(N) time.
  • A single pass is insufficient because you cannot definitively know if a character is non-repeating until you've scanned the entire string. A character encountered early might repeat later.

    Example Implementation

    from collections import Counter
    

    def first_non_repeating(s: str) -> str | None:
    if not s:
    return None # Handle empty string

    # First pass: Count character frequencies
    counts = Counter(s)

    # Second pass: Find the first character with a count of 1
    for char in s:
    if counts[char] == 1:
    return char

    return None # No non-repeating character found

    Complexity Analysis

    * Time Complexity: O(N), where N is the length of the string. This is because we iterate over the string twice. * Space Complexity: O(K), where K is the number of unique characters in the string. In the worst case (all characters are unique), K can be up to N. For ASCII characters, K is at most 256. This space is used to store the frequency map.

    Considerations and Best Practices

    * Edge Cases: The function should gracefully handle an empty string (returning None) and strings where all characters repeat (also returning None). * Case Sensitivity: Clarify with the interviewer if 'A' and 'a' should be treated as the same or different characters. The provided solution is case-sensitive. * Character Set: The approach works for both ASCII and Unicode characters, as Python dictionaries handle various character types. * Pythonic Approach: collections.Counter is highly recommended for its conciseness and efficiency in counting frequencies. For older Python versions (pre-3.7) where standard dictionaries didn't guarantee insertion order, collections.OrderedDict could be used for the frequency map to ensure the "first" non-repeating character is correctly identified, though modern Python dicts preserve insertion order.

    In the interview, also mention…

    Always clarify assumptions: what should be returned for an empty string or if no non-repeating character exists? Discuss case sensitivity and the expected character set.
    ⚡
    Pro Tip

    Red Flag: O(n²) solution (nested loops). Pro-Move: 'Counter is readable; for production we'd handle Unicode normalization (NFD) since users expect á and a to match'—shows production edge-case thinking.

    Want all answers as a PDF for offline study?
    Seven focused volumes with 750+ in-depth answers — Answer Vault →
    Related Study Guide
    🐍

    PySpark Interview Questions: Complete Guide (2026)

    Master 179 python/coding questions with expert answers. Real questions from 97+ companies.

    22 min read →

    Related Python/Coding Questions

    easyWhat are traits in Scala, and how are they different from classes?FreemediumWrite a Python function to check if a string is a palindrome.FreeeasyWhat is the difference between a list and a tuple in Python?FreeeasyExplain the difference between shallow copy and deep copy in Python.FreeeasyWhat are decorators in Python, and how do they work?Free

    Level up your prep

    Recommended
    Educative
    Educative Unlimited

    800+ hands-on courses — Grokking System Design, Coding Patterns, and AI mock interviews for your DE loop.

    Start learning →

    Some links below are affiliate links. If you buy through them we may earn a small commission at no extra cost to you — it helps keep DataEngPrep free.

    According to DataEngPrep.tech, this is one of the most frequently asked Python/Coding interview questions, reported at 3 companies. DataEngPrep.tech maintains an editor-reviewed database of 1,863 data engineering interview questions across 7 categories.

    ← Back to all questionsMore Python/Coding questions →
    Categories
    All QuestionsSQLSpark / Big DataPython / CodingSystem DesignCloud / ToolsBehavioral
    By Company
    AmazonGoogleDatabricksSnowflakeAWSAzureMicrosoftNetflixUberTCS
    Interview Guides
    All GuidesTop SQL QuestionsTop Spark QuestionsPySpark QuestionsTop Python QuestionsTop System DesignKafka QuestionsAirflow QuestionsSQL Window FunctionsETL QuestionsData Modeling
    Products
    AI Interview CoachAnswer AnalyzerSQL PlaygroundResume AnalyzerAnswer Vault PDFsPricing
    Company
    About & Editorial PolicyContact UsAI DisclosureDisclaimerTerms of ServicePrivacy Policy
    © 2026 DataEngPrep.tech. All rights reserved.
    AboutBlogContactDisclaimer