2131 - Longest Palindrome by Concatenating Two Letter Words
정보
- 문제 보기: 2131 - Longest Palindrome by Concatenating Two Letter Words
- 소요 시간: 31분 3초
- 풀이 언어:
java
- 체감 난이도: 3️⃣
- 리뷰 횟수: ✅
풀이 키워드
스포주의
해시
풀이 코드
정보
- 메모리: 57700 KB
- 시간: 103 ms
class Solution {
public int longestPalindrome(String[] words) {
Map<String, Integer> diffHash = new HashMap<>();
Map<String, Integer> sameHash = new HashMap<>();
int ans = 0;
for (String w : words) {
if (w.charAt(0) == w.charAt(1)) {
sameHash.merge(w, 1, Integer::sum);
}
else {
String rw = new StringBuilder(w).reverse().toString();
int v = diffHash.getOrDefault(rw, 0);
if (v == 0) {
diffHash.merge(w, 1, Integer::sum);
}
else {
ans += 4;
diffHash.merge(rw, -1, Integer::sum);
}
}
}
boolean hasMid = false;
for (int v : sameHash.values()) {
if (0 < v) {
ans += v >> 1 << 2;
if ((v & 1) == 1) hasMid = true;
}
}
return ans + (hasMid ? 2 : 0);
}
}