Algorithm/1일 1코테
[🥰 leetcode] 1328. Break a Palindrome
대인보우
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 ''
반응형