반복되는 문자가 없는 가장긴 부분문자열(substring)의 길이를 구하는 문제이다.
for문으로 순차적으로 문자를 탐색하면서 map 언제 마지막으로 해당 문자를 마주쳤는지 저장한다. 만약 마주친 문자가 나온다면 마주친 문자의 개수가 부분문자열의 길이가 된다. 그리고 마주친 문자가 이전에 등장한 위치 + 1 부터 현재위치까지 map을 이용해 마주친 문자들을 넣어준다.
class Solution {
public int lengthOfLongestSubstring(String s) {
int ans = 0;
Map<String, Integer> visitedPos = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
Integer lastPos = visitedPos.get(Character.toString(s.charAt(i)));
if (lastPos != null) {
ans = Math.max(visitedPos.size(), ans);
visitedPos = new HashMap<>();
for (int j = lastPos + 1; j < i; j++) {
visitedPos.put(Character.toString(s.charAt(j)), j);
}
}
visitedPos.put(Character.toString(s.charAt(i)), i);
}
ans = Math.max(visitedPos.size(), ans);
return ans;
}
}
반응형
'Algorithm > LeetCode' 카테고리의 다른 글
[Java] LeetCode 11번 Container With Most Water (0) | 2021.09.26 |
---|---|
[Java] LeetCode 10번 Regular Expression Matching (0) | 2021.09.26 |
[Java] LeetCode 5번 Longest Palindromic Substring (0) | 2021.09.25 |
[Java] LeetCode 4번 Median of Two Sorted Arrays (0) | 2021.09.25 |
[Java] LeetCode 2번 Add Two Numbers (0) | 2021.09.24 |