반응형
https://leetcode.com/problems/reverse-only-letters/
1. 2022.03.30 시도
소요시간: 9분
class Solution {
public String reverseOnlyLetters(String s) {
int left = 0;
int right = s.length() -1;
String ls ="";
String rs ="";
while(left < right) {
char lc = s.charAt(left);
char rc = s.charAt(right);
if (isEnglishLetter(lc) == false) {
left++;
ls = ls + lc;
continue;
} else if (isEnglishLetter(rc) == false) {
right--;
rs = rc + rs;
continue;
}
ls = ls + rc;
rs = lc + rs;
left++;
right--;
}
if (left == right) {
return ls + s.charAt(left) + rs;
}
return ls+rs;
}
private boolean isEnglishLetter(char letter) {
if ('a' <= letter && letter <= 'z') {
return true;
}
if ('A' <= letter && letter <= 'Z') {
return true;
}
return false;
}
}
풀이 접근 과정
양쪽의 글자를 이어서 붙인다는 생각으로 만들었다.
ls는 왼쪽부터 채워지는 글자고, rs는 오른쪽부터 채워지는 글자다.
느낀점
- 솔루션을 보니 이렇게 풀면 훨씬 쉽게 다가오겠다는 것이 있어 소개한다.
- 첫번째는 스택을 이용하는 방법이 있고
- 두번째는 포인터를 이용해 더해가는 것이다.
// stack
class Solution {
public String reverseOnlyLetters(String s) {
LinkedList<Character> stack = new LinkedList<>();
for (int i=0; i<s.length(); i++) {
if (Character.isLetter(s.charAt(i))) {
stack.push(s.charAt(i));
}
}
StringBuilder ret = new StringBuilder();
for (int i=0; i<s.length(); i++) {
if (Character.isLetter(s.charAt(i))) {
ret.append(stack.pop());
} else {
ret.append(s.charAt(i));
}
}
return ret.toString();
}
}
// pointer
class Solution {
public String reverseOnlyLetters(String s) {
int j = s.length() - 1;
StringBuilder ret = new StringBuilder();
for (int i=0; i<s.length(); i++) {
if (Character.isLetter(s.charAt(i))) {
while(!Character.isLetter(s.charAt(j))) {
j--;
}
ret.append(s.charAt(j--));
} else {
ret.append(s.charAt(i));
}
}
return ret.toString();
}
}
알고리즘 정리노트: .leetcode(알고리즘 문제풀이 접근)
반응형
'알고리즘 풀이' 카테고리의 다른 글
.leetcode(59. Spiral Matrix II) (0) | 2022.03.31 |
---|---|
.leetcode(54. Spiral Matrix) (0) | 2022.03.31 |
.leetcode(404. Sum of Left Leaves) (0) | 2022.03.30 |
.leetcode(852. Peak Index in a Mountain Array) (0) | 2022.03.29 |
.leetcode(700. Search in a Binary Search Tree) (0) | 2022.03.29 |