프로그래밍 프로세스 중에 문자열 처리는 매우 빈번한 요구 사항입니다. 특히 괄호와 그 중첩 구조를 만날 때 괄호 안의 하위 스트링을 뒤집는 경우 종종 개발자가 어려움을 겪게됩니다. 이 기사에서는 문제 설명, 알고리즘 아이디어에서 특정 구현으로 각 괄호 쌍의 문자열을 역전시키는 방법을 소개합니다.
일반적인 문자와 괄호가 포함 된 문자열이 주어지면 목표는 각 괄호 쌍 사이의 내용을 뒤집는 것입니다. 예를 들어, "(ABC) de (fgh)"를 입력하고 예상 출력은 "cbadehgf"입니다. 이러한 문제는 명확한 규칙과 단계를 통해 효과적으로 해결할 수 있습니다.
다음 예제는 문제를 이해하는 데 도움이됩니다.
입력하다: "(xyz)(abc)"
산출: "zyxcba"
입력하다: "a(bc(de)fg)h"
산출: "ahgfedcba"
이 문제를 해결하기위한 가장 적절한 데이터 구조는 스택입니다. 스택은 중첩 된 브래킷의 계층을 쉽게 관리 할 수 있기 때문입니다. 전체 프로세스는 다음과 같습니다.
function reverseParentheses($s) {
$stack = [];
$currentString = "";
for ($i = 0; $i < strlen($s); $i++) {
$char = $s[$i];
if ($char === '(') {
array_push($stack, $currentString);
$currentString = "";
} elseif ($char === ')') {
$currentString = strrev($currentString);
if (!empty($stack)) {
$currentString = array_pop($stack) . $currentString;
}
} else {
$currentString .= $char;
}
}
return $currentString;
}
// 샘플 통화
echo reverseParentheses("(abc)de(fgh)"); // 산출 cbadehgf
이 방법의 시간 복잡성은 O (n)이고 N은 각 문자가 한 번 액세스하기 때문에 입력 문자열의 길이입니다. 공간 복잡성은 또한 O (n)이며 스택과 현재 문자열을 저장하는 데 사용됩니다.
스택 구조를 사용하여 브래킷의 하위 문자열을 역전시키는 것은 이러한 문제에 대한 효율적인 솔루션입니다. 이 기사에 소개 된 아이디어 및 코드 예제는 실제 프로젝트에서 유사한 문자열 처리 요구 사항을 만나면 참조 응용 프로그램에 적합하여 개발자가 코딩 효율성 및 문제 해결 기능을 향상시킬 수 있도록 도와줍니다.