검지 Offer 48.중복되지 않은 최대 하위 문자열
6814 단어 알고리즘과 데이터 구조
제목 링크
Leetcode
제목 설명
중복된 문자가 없는 하위 문자열의 길이를 구하려면 문자열 (a~z만 포함) 을 입력하십시오.예를 들어 arabcacfr의 경우 가장 긴 중복된 문자가 없는 하위 문자열은 acfr이고 길이는 4이다.
문제풀이의 방향
동적 계획.먼저 dp[i]를 정의하면 i번째 문자로 끝나는 중복된 문자를 포함하지 않는 하위 문자열의 최대 길이를 나타냅니다.만약 i번째 문자가 나타나지 않았다면 dp[i] = dp[i-1] + 1;만약에 i자 이전에 나타났다면 우리는 상황을 나누어 토론해야 한다. 만약에 나타난 위치와 현재 위치의 거리 d<=dp[i-1], 즉 나타난 위치가 i-1의 가장 긴 문자열에 있다면 이때 dp[i]=d;그렇지 않으면 i-1의 가장 긴 문자열을 제외하고 dp[i] = dp[i-1] + 1class Solution {
public int lengthOfLongestSubstring(String str) {
if (str==null || str.length()==0) return 0;
int n = str.length(), maxLen = 1;
int[] dp = new int[n], pos = new int[256];
Arrays.fill(pos, -1);
dp[0] = 1;
pos[str.charAt(0)] = 0;
for (int i=1;i<n;i++) {
int idx = str.charAt(i);
int lastPos = pos[idx];
int distance = lastPos==-1? Integer.MAX_VALUE: i-lastPos;
if (lastPos==-1 || distance>dp[i-1]) dp[i] = dp[i-1] + 1;
else dp[i] = distance;
maxLen = Math.max(maxLen, dp[i]);
pos[idx] = i;
}
return maxLen;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
두 갈래 나무의 앞 순서, 중간 순서, 뒤 순서, 깊이 우선 검색, 폭 우선 검색
광범위한 우선 검색(Breadth-First-Search)은 루트 노드에서 시작하여 층층이 접근하여 직관적인 생각에 비교적 부합된다.대기열의 선진적인 선출 특성을 사용하여 특정한 층 노드를 방문한 후 이 층 노드를 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
중복된 문자가 없는 하위 문자열의 길이를 구하려면 문자열 (a~z만 포함) 을 입력하십시오.예를 들어 arabcacfr의 경우 가장 긴 중복된 문자가 없는 하위 문자열은 acfr이고 길이는 4이다.
문제풀이의 방향
동적 계획.먼저 dp[i]를 정의하면 i번째 문자로 끝나는 중복된 문자를 포함하지 않는 하위 문자열의 최대 길이를 나타냅니다.만약 i번째 문자가 나타나지 않았다면 dp[i] = dp[i-1] + 1;만약에 i자 이전에 나타났다면 우리는 상황을 나누어 토론해야 한다. 만약에 나타난 위치와 현재 위치의 거리 d<=dp[i-1], 즉 나타난 위치가 i-1의 가장 긴 문자열에 있다면 이때 dp[i]=d;그렇지 않으면 i-1의 가장 긴 문자열을 제외하고 dp[i] = dp[i-1] + 1class Solution {
public int lengthOfLongestSubstring(String str) {
if (str==null || str.length()==0) return 0;
int n = str.length(), maxLen = 1;
int[] dp = new int[n], pos = new int[256];
Arrays.fill(pos, -1);
dp[0] = 1;
pos[str.charAt(0)] = 0;
for (int i=1;i<n;i++) {
int idx = str.charAt(i);
int lastPos = pos[idx];
int distance = lastPos==-1? Integer.MAX_VALUE: i-lastPos;
if (lastPos==-1 || distance>dp[i-1]) dp[i] = dp[i-1] + 1;
else dp[i] = distance;
maxLen = Math.max(maxLen, dp[i]);
pos[idx] = i;
}
return maxLen;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
두 갈래 나무의 앞 순서, 중간 순서, 뒤 순서, 깊이 우선 검색, 폭 우선 검색
광범위한 우선 검색(Breadth-First-Search)은 루트 노드에서 시작하여 층층이 접근하여 직관적인 생각에 비교적 부합된다.대기열의 선진적인 선출 특성을 사용하여 특정한 층 노드를 방문한 후 이 층 노드를 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
class Solution {
public int lengthOfLongestSubstring(String str) {
if (str==null || str.length()==0) return 0;
int n = str.length(), maxLen = 1;
int[] dp = new int[n], pos = new int[256];
Arrays.fill(pos, -1);
dp[0] = 1;
pos[str.charAt(0)] = 0;
for (int i=1;i<n;i++) {
int idx = str.charAt(i);
int lastPos = pos[idx];
int distance = lastPos==-1? Integer.MAX_VALUE: i-lastPos;
if (lastPos==-1 || distance>dp[i-1]) dp[i] = dp[i-1] + 1;
else dp[i] = distance;
maxLen = Math.max(maxLen, dp[i]);
pos[idx] = i;
}
return maxLen;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
두 갈래 나무의 앞 순서, 중간 순서, 뒤 순서, 깊이 우선 검색, 폭 우선 검색광범위한 우선 검색(Breadth-First-Search)은 루트 노드에서 시작하여 층층이 접근하여 직관적인 생각에 비교적 부합된다.대기열의 선진적인 선출 특성을 사용하여 특정한 층 노드를 방문한 후 이 층 노드를 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.