class Solution {
public int longestPalindrome(String s) {
//배열로 바꾸고 소팅해서 순서바꿔주고 배열에 다 담아
int[] count = new int[60]; //알파벳 개수만큼
char[] sArray = s.toCharArray();
//배열크기대로 나열해서 짝수인거 다더하기
int sum = 0;
int max = 0;
int upmax=0;
boolean odd=false;
int oddMaxCount = 0;
for (int l = 0; l < count.length; l++) {
count[l]=0;
}
for (int i = 0; i < sArray.length; i++) {
if (sArray[i] == 'a') {
count[0]++;
} else if (sArray[i] == 'b') {
count[1]++;
} else if (sArray[i] == 'c') {
count[2]++;
} else if (sArray[i] == 'd') {
count[3]++;
} else if (sArray[i] == 'e') {
count[4]++;
} else if (sArray[i] == 'f') {
count[5]++;
} else if (sArray[i] == 'g') {
count[6]++;
} else if (sArray[i] == 'h') {
count[7]++;
} else if (sArray[i] == 'i') {
count[8]++;
} else if (sArray[i] == 'j') {
count[9]++;
} else if (sArray[i] == 'k') {
count[10]++;
} else if (sArray[i] == 'l') {
count[11]++;
} else if (sArray[i] == 'm') {
count[12]++;
} else if (sArray[i] == 'n') {
count[13]++;
} else if (sArray[i] == 'o') {
count[14]++;
} else if (sArray[i] == 'p') {
count[15]++;
} else if (sArray[i] == 'q') {
count[16]++;
} else if (sArray[i] == 'r') {
count[17]++;
} else if (sArray[i] == 's') {
count[18]++;
} else if (sArray[i] == 't') {
count[19]++;
} else if (sArray[i] == 'u') {
count[20]++;
} else if (sArray[i] == 'v') {
count[21]++;
} else if (sArray[i] == 'w') {
count[22]++;
} else if (sArray[i] == 'x') {
count[23]++;
} else if (sArray[i] == 'y') {
count[24]++;
} else if (sArray[i] == 'z') {
count[25]++;
}else if (sArray[i] == 'A') {
count[26]++;
}else if (sArray[i] == 'B') {
count[27]++;
}else if (sArray[i] == 'C') {
count[28]++;
}else if (sArray[i] == 'D') {
count[29]++;
}else if (sArray[i] == 'E') {
count[30]++;
}else if (sArray[i] == 'F') {
count[31]++;
}else if (sArray[i] == 'G') {
count[32]++;
}else if (sArray[i] == 'H') {
count[33]++;
}else if (sArray[i] == 'I') {
count[34]++;
}else if (sArray[i] == 'J') {
count[35]++;
}else if (sArray[i] == 'K') {
count[36]++;
}else if (sArray[i] == 'L') {
count[37]++;
}else if (sArray[i] == 'M') {
count[38]++;
}else if (sArray[i] == 'N') {
count[39]++;
}else if (sArray[i] == 'O') {
count[40]++;
}else if (sArray[i] == 'P') {
count[41]++;
}else if (sArray[i] == 'Q') {
count[42]++;
}else if (sArray[i] == 'R') {
count[43]++;
}else if (sArray[i] == 'S') {
count[44]++;
}else if (sArray[i] == 'T') {
count[45]++;
}else if (sArray[i] == 'U') {
count[46]++;
}else if (sArray[i] == 'V') {
count[47]++;
}else if (sArray[i] == 'W') {
count[48]++;
}else if (sArray[i] == 'X') {
count[49]++;
}else if (sArray[i] == 'Y') {
count[50]++;
}else if (sArray[i] == 'Z') {
count[51]++;
}
}
for (int k = 0; k < count.length; k++) {
if (count[k] % 2 == 0) {
sum += count[k];
} else if(count[k] % 2 == 1) {
//upmax = Math.max(upmax, count[k]);
sum += count[k]-1;
oddMaxCount = 1;
}
}
sum+= oddMaxCount;
return(sum);
}
}
알게된 사실
1. 배열을 소팅 할 필요가 없었다.
2. 대소문자 구별해 주어야했다.
⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️
3. longest palindrome that can be built with those letters. 해석해보자면 주어진 문자들로 최대한의 plindrome 을 만들자는 것이다. 그러므로 홀수로 3개가 있다면 2개까지 쓸수 있다고 생각해야했는데 내 마음대로 문제를 해석해버렸다.
홀수라면 무조건 가장 큰 홀수만 쓴다고 생각했는데,
모든 홀수가 sum += count[k]-1; 아니었다 왜냐면 aaa 케이스의 경우에 3 이어야하는데 2 로 나오기때문.
a 부터 Z까지 if else 로 난리를 쳤는데 실제로는 아스키코드로 개선이 가능하다 개선방법은 다음에 ... 추가로 해야겠다