https://leetcode.com/problems/palindrome-linked-list/description/
palindrome에 대해서 잘 몰라서 풀이 방식에 대해 찾아보았다.
1. 절반으로 나눠서 비교하는 방법
2. 뒤집은 다음에 같은지 확인하는 방법
1번으로 푼 코드
8ms
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public boolean isPalindrome(ListNode head) {
List<Integer> list = new ArrayList<>();
// 멋지다.. 똑똑한 외국녀석들..
for(ListNode n = head; n != null; n = n.next) {
list.add(n.val);
}
int mid = list.size() / 2;
for(int i = 0; i < mid; i++) {
if (list.get(i) != list.get(list.size() - 1 - i)) {
return false;
}
}
return true;
}
}
2번으로 푼 코드
정말 느린 풀이..(30ms)
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public static List<Integer> stack;
public boolean isPalindrome(ListNode head) {
stack = new ArrayList<>();
check(head);
return checkPalindrome();
}
public boolean checkPalindrome() {
List<Integer> reversedStack = new ArrayList<>(stack);
Collections.reverse(reversedStack);
for(int i = 0; i < stack.size(); i++) {
if (stack.get(i) != reversedStack.get(i)) {
return false;
}
}
return true;
}
public void check(ListNode node) {
if (node == null) {
return;
}
stack.add(node.val);
check(node.next);
}
}
'코딩테스트' 카테고리의 다른 글
409. Longest Palindrome (0) | 2024.02.17 |
---|---|
9. Palindrome Number (0) | 2024.02.16 |
14. Longest Common Prefix (0) | 2024.02.14 |
844. Backspace String Compare (0) | 2024.02.12 |
13. Roman to Integer (0) | 2024.02.08 |