반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 백트래킹
- 백준
- Algorithmus
- 리트코드
- GitHub Desktop
- 프로그래머스
- Pro-Con
- ASF-110
- 프로콘 갈림현상
- LeetCode
- python3
- 알고리즘 종류 정리
- 자소서
- git
- Python
- baekjoon
- programmers
- 네이버 검색 시스템
- 알고리즘
- C++
- DP
- 격리수준
- algorithm
- Github
- Ultimate Search
- 프로콘
- 코딩테스트
- 취준
- SRE
- 제노블레이드 2
Archives
- Today
- Total
산타는 없다
[리트코드 / LeetCode] 3. Longest Substring Without Repeating Characters 풀이 - C++ 본문
코딩테스트/리트코드
[리트코드 / LeetCode] 3. Longest Substring Without Repeating Characters 풀이 - C++
LEDPEAR 2020. 12. 30. 00:32반응형
문제 원문
Given a string s, find the length of the longest substring without repeating characters.
Example 1:
Input: s = "abcabcbb" Output: 3 Explanation: The answer is "abc", with the length of 3.
Example 2:
Input: s = "bbbbb" Output: 1 Explanation: The answer is "b", with the length of 1.
Example 3:
Input: s = "pwwkew" Output: 3 Explanation: The answer is "wke", with the length of 3. Notice that the answer must be a substring, "pwke" is a subsequence and not a substring.
Example 4:
Input: s = "" Output: 0
Constraints:
0 <= s.length <= 5 * 104s consists of English letters, digits, symbols and spaces.
코드 원문
class Solution {
public:
int lengthOfLongestSubstring(string s) {
}
};
풀이
아직 많이 부족해서 그런지 이번 문제도 쉽지 않았네요
문제를 이해하는 것부터 문제였습니다.
중복된 문자가 나올 때까지의 문자열 중 가장 긴 문자열의 길이를 리턴하는 문제입니다.
문자열의 크기 만큼 순회하면서 중복되지 않은 문자는 추가하고
중복되는 문자가 나왔을 때 최댓값을 갱신하고 중복이 나온 문자만큼 삭제해 줍니다.
처음엔 그냥 vector를 초기화했었는데 그러니깐 중복된 문자의 위치에 따라 예외적인 상황이 나오게 되네요
어찌 보면 당연한 거였는데 아직 많이 부족한 것 같습니다.
순회를 마치고 vector에 저장된 값 마저 처리한 후 리턴해 줍니다.
성공 코드
class Solution {
public:
int lengthOfLongestSubstring(string s) {
vector<char> Words;
int nMax = 0;
for (int i = 0; i < s.size(); i++)
{
//진행한 문자 중 중복된 값이 있는지 확인
vector<char>::iterator iter = find(Words.begin(), Words.end(), s[i]);
if (iter != Words.end()) // 있으면 nMax 갱신 및 문자열 제거
{
if (nMax < Words.size()) nMax = Words.size();
Words.erase(Words.begin(), ++iter); // 제거는 중복된 문자까지
Words.push_back(s[i]);
}
else
{
Words.push_back(s[i]); // 중복되지 않았으면 문자 추가
}
}
if (nMax < Words.size()) nMax = Words.size(); // 문자열을 모두 탐색한 후 nMax 갱신
return nMax;
}
};
결과
Runtime: 20 ms, faster than 72.91% of C++ online submissions for Longest Substring Without Repeating Characters.
Memory Usage: 7.7 MB, less than 81.83% of C++ online submissions for Longest Substring Without Repeating Characters.
반응형
'코딩테스트 > 리트코드' 카테고리의 다른 글
[리트코드 / LeetCode] 8. String to Integer (atoi) 풀이 - python3 (0) | 2021.01.01 |
---|---|
[리트코드 / LeetCode] 7. Reverse Integer 풀이 - python3 (0) | 2021.01.01 |
[리트코드 / LeetCode] 6. ZigZag Conversion 풀이 - C++ (0) | 2021.01.01 |
[리트코드 / LeetCode] 4. Median of Two Sorted Arrays 풀이 - C++ (0) | 2020.12.30 |
[리트코드 / LeetCode] 2. Add Two Numbers 풀이 - C++ (0) | 2020.12.28 |
Comments