1957. Delete Characters to Make Fancy String#
easy
, String
A fancy string is a string where no three consecutive characters are equal.
Given a string s, delete the minimum possible number of characters from s to make it fancy.
Return the final string after the deletion. It can be shown that the answer will always be unique.
Example 1:
Input: s = โleeetcodeโ
Output: โleetcodeโ
Explanation:
Remove an โeโ from the first group of โeโs to create โleetcodeโ.
No three consecutive characters are equal, so return โleetcodeโ.
Example 2:
Input: s = โaaabaaaaโ
Output: โaabaaโ
Explanation:
Remove an โaโ from the first group of โaโs to create โaabaaaaโ.
Remove two โaโs from the second group of โaโs to create โaabaaโ.
No three consecutive characters are equal, so return โaabaaโ.
Example 3:
Input: s = โaabโ
Output: โaabโ
Explanation: No three consecutive characters are equal, so return โaabโ.
## code
import os
import logging
import traceback
import datetime
def get_logger(LEVEL: str = "INFO") -> logging.Logger:
# log_time = datetime.datetime.today().strftime("%Y-%m-%d_%H-%M-%S")
logger = logging.getLogger("custom_logger")
logger.setLevel(getattr(logging, LEVEL.upper(), logging.INFO))
# file_handler = logging.FileHandler(f"./logs/{log_time}_logfile.log")
stream_handler = logging.StreamHandler()
formatter = logging.Formatter(
fmt="[%(asctime)s %(levelname)s] %(message)s", datefmt="%Y/%m/%d %H:%M:%S"
)
# file_handler.setFormatter(formatter)
stream_handler.setFormatter(formatter)
if logger.hasHandlers():
logger.handlers.clear()
# logger.addHandler(file_handler)
logger.addHandler(stream_handler)
return logger
def sol(problem_num, func):
script_dir = os.getcwd() # os.path.dirname(os.path.abspath(__file__))
path = script_dir + f"\\txt\\{problem_num}" + ".txt"
# logger.info(f"file path : {path}")
try:
with open(path, "r") as getter:
line_count = 1
while True:
line = getter.readline()
# logger.info(f"this line : {line.strip().split()}")
if not line:
logger.info("EOF")
break
try:
inp, oup = line.strip().split()
if not func(inp):
raise ValueError(f"wrong output in line : {line}")
logger.info(f"{line_count} : {inp} : {oup == func(inp)}")
line_count += 1
except Exception as e:
logger.error(f"Error occurred while processing line: {line}")
logger.error(f"Exception: {e}")
logger.error(traceback.format_exc())
line_count += 1
except FileNotFoundError:
logger.error(f"File not found: {path}")
except Exception as e:
logger.error(f"Error opening file: {e}")
logger.error(traceback.format_exc())
logger.info("ACCEPT")
class Solution:
def makeFancyString(self, s: str) -> str:
result = ""
grouped = []
current_group = s[0]
for char in s[1:]:
if char == current_group[-1]:
current_group += char
else:
grouped.append(current_group)
current_group = char
grouped.append(current_group)
for group in grouped:
if len(group) > 2:
result += group[0] * 2
else:
result += group
return result
problem_num = 1957
global logger
logger = get_logger("info")
sol(problem_num, Solution().makeFancyString)
[2024/11/01 14:11:20 INFO] 1 : leeetcode : True
[2024/11/01 14:11:20 INFO] 2 : aaabaaaa : True
[2024/11/01 14:11:20 INFO] EOF
[2024/11/01 14:11:20 INFO] ACCEPT
๊ฒ๋ ๋๋ ๋ญ๊ฐ ์ด๋ ต๊ฒ ํ์๋๋ฐ ๋ค๋ฅธ ์ฌ๋ ์ฝ๋ ๋ณด๋๊น ์ด์ด๊ฐ ์์ ์ ๋๋ก ์ฝ๊ฒ ํผ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
class Solution:
def makeFancyString(self, s: str) -> str:
ans = s[0]
cnt = 1
for i in range(1, len(s)):
if s[i] == ans[-1]:
cnt += 1
if cnt < 3:
ans += s[i]
else:
cnt = 1
ans += s[i]
return ans
๋๋ for ๋ฌธ์ ๋๋ฒ์ ๋์ง๋ง ์ฌ๊ธด ํ๋ฒ๋ง ๋๋ฉด์ ์์ธ์ฒ๋ฆฌ๋ฅผ ํด๋ฒ๋ฆฐ๋ค. ์ค์ํ ๊ฑฐ์จ cnt += ๋ฅผ ์ฌ์ฉํ๋ ์์ด๋์ด์ธ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.