1156 - Swap For Longest Repeated Character Substring
info
- 문제 보기: 1156 - Swap For Longest Repeated Character Substring
- 소요 시간: 💥1시간 초과
- 풀이 언어:
java
- 체감 난이도: 4️⃣
- 리뷰 횟수: ✅
풀이 키워드
스포주의
해시
투포인터
풀이 코드
info
- 메모리: 42710 KB
- 시간: 3 ms
class Solution {
static {
for (int i=0; i < 100; ++i) maxRepOpt1("");
}
public static int maxRepOpt1(String text) {
Map<Character, Integer> chMap = new HashMap<>(); // char counters
char[] textArr = text.toCharArray();
for (char ch : textArr) {
chMap.merge(ch, 1, Integer::sum);
}
// calc 1-ignorance length
int mxlen = 1; // if text.length == 1 then mxlen is 1
int i = 0;
int j = 1;
while (i < textArr.length) {
char targetCh = textArr[i];
int len = 1;
boolean skipped = false; // 1-ignored?
j = i+1;
int breakPoint = j;
while (j < textArr.length) {
if (textArr[j] == targetCh) ++j; // same
else { // not same
if (!skipped) {
breakPoint = j;
skipped = true;
++j;
}
else break;
}
}
if (!skipped) breakPoint = j;
// if not skipped then force extend (corner case)
int extended = (skipped ? j-i : j-i+1);
// if no spare character then -1
int cand = (chMap.get(targetCh) < extended) ? extended-1 : extended;
//System.out.println(textArr[i] + " " + chMap.get(targetCh) + " " + cand);
mxlen = Math.max(mxlen, cand);
i = breakPoint;
}
return mxlen;
}
}
풀이 해설
WIP
메모
- 난이도가 좀 있는게, 해시 좋아하는 카카오 공채 코테에서나 나올듯
- 시간이 좀 걸렸고(1시간 반 정도), WA 받으면서 corner case 잡았지만 유형도 맞췄고 풀이 방향성은 매우 좋았음.
- 가벼운 마음으로 코랜디 돌렸는데 처음부터 폭탄 잡았네 아