[String/C++] Leetcode _ First Unique Character in a String

2025. 5. 1. 00:50·PS/LeetCode & Codility

 

🔎 문제 

문자열 s에서 중복되지 않은 첫 번째 원소의 위치를 출력하는 문제이다.

 

나의 풀이

문자의 개수를 카운트 해야해서 hashmap을 떠올렸고,

원소의 위치를 출력해야해서 고민 좀 했다.

하지만 만들어놓은 해시맵을 다시 탐색하면서 해시맵의 값이 0이면 그 때의 i값을 출력하는 방식으로 구현을 했다. 

요즘 자신감이 너무 떨어져서 그런지 이런 문제에도 쉽게 쪼는 것 같다. 힝

class Solution {
public:
    int firstUniqChar(string s) {
        unordered_map<int,int> hMap; 
        for (int i=0;i<s.size();++i){
            hMap[s[i]]++;
        }
        for (int i=0;i<s.size();++i){
            if (hMap[s[i]]==1){
                return i;
            }
        }
        return -1;
    }
};

 

이러면 시간복잡도 O(N) 일 것이다. 해시는 O(1)이고, 반복문을 각각 따로 두 번 돌리니까 말이다.

 

개선코드 및 회고

결과를 보니 통과는 했지만 14ms로 꽤 중간에 분포한다. 

상위에 있는 코드를 보니 해시맵을 안쓰고 그냥 벡터로 숫자 카운트 해서 동일하게 두 번 반복문 돌려서 찾고 있다.

동일한데 벡터로 써서 더 시간이 빠르다는 것이다.

해시는 해시 충돌이 발생할 경우 O(N)이 될 수도 있고,

벡터가 메모리 할당이 한 번에 이뤄져서 인덱싱이 빠르기 때문에 더욱 빠른 결과를 가져올 수 있게 되는 것 같다.

원소수를 카운트하면 해시를 쓴다라는 생가에 너무 갇혀 있었던 것 같다.

특히나 글자수가 고정되어 있는 상태라면 벡터를 고려하자!

class Solution {
public:
    int firstUniqChar(string s) {
        vector<int> v(27,0);
        for (int i=0;i<s.size();++i){
            v[s[i]-'a']++;
        }
        for (int i=0;i<s.size();++i){
            if (v[s[i]-'a']==1){
                return i;
            }
        }
        return -1;
    }
};
저작자표시 비영리 변경금지 (새창열림)

'PS > LeetCode & Codility' 카테고리의 다른 글

[Lesson1/C++] Codility - BinaryGap  (0) 2025.11.29
[Array/C++] Single Number & Intersection of Arrays II - HashMap  (0) 2025.04.25
[Array/C++] Rotate Array  (0) 2025.04.25
'PS/LeetCode & Codility' 카테고리의 다른 글
  • [Lesson1/C++] Codility - BinaryGap
  • [Array/C++] Single Number & Intersection of Arrays II - HashMap
  • [Array/C++] Rotate Array
Lyv
Lyv
  • Lyv
    inimizi
    Lyv
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • 이것저것 도전 (5)
        • 공모전 (0)
        • 우테코 (5)
      • PS (16)
        • 삼성기출 (2)
        • LeetCode & Codility (4)
        • Programmers (6)
        • BaekJoon (4)
      • 공부기록 (33)
        • CS (16)
        • 영어 (1)
        • iOS (1)
        • 프로그래밍 언어 (0)
        • Web (4)
        • Linux (1)
        • Docker (2)
        • Network (4)
        • IaC (3)
      • 프로젝트 경험 (0)
      • DailyLog (4)
      • 취준Log (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    FastAPI
    PS
    자동화
    이미지
    os
    DP
    디자인패턴
    C++
    ansible
    IAC
    공부기록
    스케줄링
    네트워크
    리눅스
    운영체제
    대학생
    프로그래머스
    우테코
    코테
    manifest
    프리코스회고
    운영체제intro
    c언어
    til
    우테코프리코스
    정처기실기
    백준
    컨테이너
    정처기
    문제풀이
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Lyv
[String/C++] Leetcode _ First Unique Character in a String
상단으로

티스토리툴바