본문 바로가기

LeetCode/String

(7)
[Easy] 125. Valid Palindrome #문제설명 #문제 풀이 풀이 1. class Solution { public boolean isPalindrome(String s) { s = s.toLowerCase().replaceAll("[^a-z0-9]", ""); int right = s.length() - 1, left = 0; while(right >= left){ if(s.charAt(left) != s.charAt(right)){ return false; } right--; left++; } return true; } } 풀이 2. public class Solution { public boolean isPalindrome(String s) { if (s.isEmpty()) { return true; } int head = 0, tail..
[Easy] 20. Valid Parentheses #문제 설명 #문제 풀이 class Solution { public boolean isValid(String s) { Stack stack = new Stack(); for (char c : s.toCharArray()) { if (c == '(') stack.push(')'); else if (c == '{') stack.push('}'); else if (c == '[') stack.push(']'); else if (stack.isEmpty() || stack.pop() != c) return false; } return stack.isEmpty(); } } 위와 같이 Stack을 사용하면 쉽게 풀 수 있다.
[Medium] 49. Group Anagrams (Amazon) #문제 설명 Leetcode 49번 문제에서는 여러개의 문자열이 주어진다. 주어진 문자열로 anagram을 만들수있는 문자열들끼리 묶은 sublist를 담은 list를 return 하는 문제이다. 여기서 anagram이란 주어진 철자들로 다른 단어를 만든다는 뜻이다. 예를 들어 race는 r, a, c, e를 사용해 care라는 단어를 만들수 있다, 이런것들이 anagram이다. 그래서 위에 주어진 예시 1번을 보면 nat을 n,a,t를 사용해 tan를 만들수있기때문에 묶고 (이 문제에서는 말이 안되는 단어여도 상관없다, 모든 문자만 겹치면 anagram으로 침), ate는 a,t,e를 사용해 eat과 tea를 만들수있기 때문에 묶는다, bat으로는 주어진 array의 문자열들의 anagram으론 바꾸지..
[Medium] 1663. Smallest String With A Given Numeric Value (Microsoft) #문제 설명 Leetcode 1663번 문제에서는 문자열 길이 n과 정수 k가 주어진다. 이 문제에서 각 소문자 알파벳들에게는 1부터26의 값이 부여된다 (예: a는 1, b는 2, ... , z는 26). 이 문제에서는 주어진 n과 k에 맞는 문자열을 return해야한다. 예를 들어 n = 3과 m은 27이 주어지면 "aay"라는 문자열을 return해야된다. 왜냐하면 문자열 길이는 3이어야하고 a = 1 + a = 1 + y = 25 = 27이기 때문이다. #문제 풀이 class Solution { public String getSmallestString(int n, int k) { char[] result = new char[n]; for (int position = n - 1; position >..
[Medium] 856. Score of Parentheses #문제 설명 Leetcode 856번 문제는 괄호로 구성된 문자열이 구성된다. 이 괄호들 패턴에는 점수가 있다. () 는 1 점, ()() 는 1 + 1 = 2, (()) = 2 * 1 = 2 이다. 예를 들어 (()()) 라는 문자열이 주어지면 () + () = 2 이고 (2) 는 2 * 2 이기때문에 4가 정답이다. #문제 풀이 class Solution { public int scoreOfParentheses(String s) { Stack st = new Stack(); int score = 0; for(int i = 0; i < s.length(); i++){ char ch = s.charAt(i); if(ch == '('){ st.push(score); score = 0; } else { sc..
[Medium] 5. Longest Palindromic Substring (구글 코딩 테스트 기출 문제) #문제 설명 Leetcode 5번 문제는 주어진 문자열에서 가장 긴 palindrome을 찾는 문제이다. 여기서 Palindrome이란 거꾸로 읽어도 똑바로 읽어도 같은 문자열이다 (예: 기러기 토마토 스위스 인도인 별똥별 우영우, 'Kayak', 'deed', 'rotator', 'noon', 'racecar 등등) #풀이 class Solution { public String longestPalindrome(String s) { if (s == null || s.length() < 1) return ""; int start = 0, end = 0; for (int i = 0; i < s.length(); i++) { int len1 = expandAroundCenter(s, i, i); int len..
[Easy] 344. Reverse String Leetcode 344번 문제는 단순히 주어진 문자열을 뒤집는 문제이다. 단 Space complexity (공간 복잡도) 가 O(1) 이 되도록 해야 한다. class Solution { public void reverseString(char[] s) { int i = 0, j = s.length - 1; while(j > i){ char temp = s[j]; s[j--] = s[i]; s[i++] = temp; } } }