문제
소문자와 대문자가 섞인 문자열 s가 주어진다.
인접한 문자가 서로 같은 알파벳이면서 대 소문자로 차이가 난다면 쌍소멸 시키는 문제인듯 하다.
조건
2글자 이상
자료구조에 저장시켜서 지금저장 시킨것과 2차례전에 저장시킨것이 ASCII코드 +- 32차이가 나는지 확인하고
만약 그렇다면 모두 날려버리기
vice-versa == 이 경우에도 그 반대의 경우에도 마찬가지이다.
구글링하다가 c++ stack으로 푸신 분이 계셔서 ArrayList로 접근
class Solution {
public String makeGood(String s) {
String result = "";
ArrayList<Character> temp = new ArrayList();
for(int i = 0; i < s.length(); i++)
{
temp.add(s.charAt(i));
if(temp.size() >= 2 && (temp.get(temp.size()) + 'a' - 'A') == (temp.get(temp.size()-2))
|| (temp.get(temp.size()) + 'A' - 'a') == (temp.get(temp.size()-2)))
{
temp.remove(temp.size());
temp.remove(temp.size());
}
}
return temp.toString();
}
}
// outbound
영 안풀려서 해답을 봐버렸다.
class Solution {
public String makeGood(String s) {
for (int i = 0; i < s.length() - 1; i++) {
char a = s.charAt(i);
char b = s.charAt(i + 1);
if (a != b && Character.toLowerCase(a) == Character.toLowerCase(b)) {
return makeGood(s.substring(0, i) + s.substring(i+2));
}
}
return s;
}
}
s가 leEeetcode를 넣었을 때 변수의 값
current String : leEeetcode
current i : 0
a : l
b : e
current String : leEeetcode
current i : 1
a : e
b : E
current String : leetcode
current i : 0
a : l
b : e
current String : leetcode
current i : 1
a : e
b : e
current String : leetcode
current i : 2
a : e
b : t
current String : leetcode
current i : 3
a : t
b : c
current String : leetcode
current i : 4
a : c
b : o
current String : leetcode
current i : 5
a : o
b : d
current String : leetcode
current i : 6
a : d
b : e
leetcode.com/problems/make-the-string-great/
'Algorithm > LeetCode' 카테고리의 다른 글
[LeetCode] Divisor Game (0) | 2021.03.08 |
---|---|
[LeetCode] Fibonacci number (피보나치 수열) (0) | 2021.03.06 |
[LeetCode] Sort Colors (0) | 2021.03.05 |
[LeetCode] Assign Cookies (3) | 2021.03.03 |
[LeetCode] Palindrome Number (대칭수) (0) | 2021.03.02 |