-
[🥰 leetcode] 1328. Break a PalindromeAlgorithm/1일 1코테 2022. 10. 18. 11:28반응형
https://leetcode.com/problems/break-a-palindrome/
팰린드롬 문자열을 단 한가지의 문자만 바꾸어
팰린드롬이 아니면서 && 사전식 순서에서 가장 작은 값으로 만드는 문제
예를 들어
abccba => aaccba
나의 풀이
class Solution: def breakPalindrome(self, palindrome: str) -> str: # 팰린드롬인지 체크하는 함수 def isPalindrome(p): return p == p[::-1] # 길이가 1이면 팰린드롬이 아닐 수 없기 때문에 공백 리턴 if len(palindrome) == 1: return "" p_list = list(palindrome) for i, a in enumerate(p_list): # 'a'일 경우에는 원래는 그냥 넘어감 (이미 최솟값) if a == 'a' : # 근데 a가 마지막 값인 경우 'aaa'에는 마지막 값을 b로 바꿔주어야 함 if len(p_list)-1 == i: p_list[i] = 'b' return ''.join(p_list) continue # 'a'가 아니라면 'a'로 바꿔줌 (가장 작은 값) p_list[i] = 'a' # 팰린드롬인지 확인 if isPalindrome(''.join(p_list)) == False: return ''.join(p_list) else: p_list[i] = a return ""
다른 사람 풀이
class Solution: def breakPalindrome(self, s: str) -> str: # 길이 계산 n = len(s) # n을 반으로 나누어서 앞의 반 부분만 변경(팰린드롬 이니까????) # 'a'가 아닐 경우 a로 바꿔줌 for i in range(n//2): if (s[i]!='a'): return s[:i]+'a'+s[i+1:] # 아무것도 a로 바뀌어지지 않았을 경우에는 마지막에 b로 바꿔줌 # 단 길이가 1보다 작으면 '' return s[:-1]+'b' if n>1 else ''
반응형'Algorithm > 1일 1코테' 카테고리의 다른 글
[😭프로그래머스] 달리기 경주 (0) 2023.08.17 [🥰 leetcode] 692. Top K Frequent Words (0) 2022.10.19 [🥰 leetcode] 53. Maximum Subarray (0) 2022.10.14 [😭 leetcode] 976. Largest Perimeter Triangle (0) 2022.10.12 [😭 leetcode] 334. Increasing Triplet Subsequence (0) 2022.10.11