Coding Test/LeetCode
[LeetCode] 3. Longest Substring Without Repeating Characters c++
owls
2022. 12. 27. 15:53
728x90
- 문제
Given a string s, find the length of the longest substring without repeating characters.
Input: s = "abcabcbb"
Output: 3
Explanation: The answer is "abc", with the length of 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.
문자 s가 주어지면, 반복되는 문자가 없는 가장 긴 하위 문자열의 길이를 찾는 문제입니다.
- 문제 해결
반복되는 문자열이 아닌, 반복된 문자가 없는 연속된 문자열을 찾아야 합니다.
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int n = s.size();
if( n == 0){
return 0;
}
set<char> st;
int i = 0, j = 0, maxsize = 0;
while(j < n){
if(st.count(s[j]) == 0){
st.insert(s[j]);
maxsize = max(maxsize, (int)st.size());
j++;
}
else{
st.erase(s[i]);
i++;
}
}
return maxsize;
}
};
다른 풀이
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if (s.length() == 0) {
return 0;
}
unordered_map<char, int> m;
int i = 0, j = 0, ans = INT8_MIN;
while (j < s.length()) {
m[s[j]]++;
if (m.size() == j - i + 1) {
ans = max(ans, j - i + 1);
}
else if (m.size() < j - i + 1) {
while (m.size() < j - i + 1) {
m[s[i]]--;
if (m[s[i]] == 0) {
m.erase(s[i]);
}
i++;
}
}
j++;
}
return ans;
}
};
728x90