목차
방법 2
알고리즘
출력
示例
输出
백엔드 개발 C++ 카운트 뒤에 하위 문자열이 따라오는 방식으로 인코딩된 문자열을 재귀적으로 디코딩합니다.

카운트 뒤에 하위 문자열이 따라오는 방식으로 인코딩된 문자열을 재귀적으로 디코딩합니다.

Sep 09, 2023 pm 01:53 PM
코딩 재귀 디코딩

카운트 뒤에 하위 문자열이 따라오는 방식으로 인코딩된 문자열을 재귀적으로 디코딩합니다.

이 문제에서는 총 횟수를 반복적으로 더하여 주어진 문자열을 디코딩해야 합니다.

우리는 세 가지 다른 방식으로 문제에 접근할 수 있으며 문제를 해결하기 위해 두 개의 스택 또는 하나의 스택을 사용할 수 있습니다. 또한 두 개의 스택을 사용하지 않고도 문제를 해결할 수 있습니다.

문제 설명 - 왼쪽 및 오른쪽 대괄호, 영문자 및 ​​숫자가 포함된 문자열 str이 제공됩니다. 문자열을 재귀적으로 디코딩해야 합니다.

다음은 문자열을 디코딩하는 패턴이나 규칙입니다.

  • [chars] - "chars"는 결과 문자열에 횟수만큼 표시되어야 합니다.

들어가세요

으아악

출력

으아악

지침

  • 먼저 2[n]을 디코딩하여 "2[d]3[cnn]"을 얻습니다.

  • 다음으로 3[cnn]을 디코딩합니다. 그래서 우리는 "2[d]cnnncnncnn"을 얻습니다.

  • 다음으로 2[d]를 디코딩합니다. 그래서 우리는 "ddcnnncnncnn"을 얻습니다.

들어가세요

으아악

출력

으아악

설명- 주어진 문자열을 해독하면 5개의 "I"를 얻습니다.

들어가세요

으아악

출력

으아악

설명- 입력 문자열을 디코딩하면 "fg"가 3번 나옵니다.

방법 1

이 방법에서는 두 개의 스택을 사용하여 문제를 해결합니다. 여는 괄호를 얻으면 이를 스택에 푸시합니다. 또한 숫자 문자를 얻을 때 모든 숫자 문자를 유효한 양의 정수에 추가하고 이를 정수 스택에 추가합니다. 나중에 닫는 괄호를 얻으면 스택에서 정수와 문자를 팝합니다.

알고리즘

1단계 - "instSt" 스택을 정의하여 숫자를 저장하고 "strSt"를 정의하여 문자열 문자와 왼쪽 대괄호를 저장하세요. 또한 "응답"은 결과 문자열을 저장하도록 초기화되고 "tempStr"은 임시 문자열을 저장하도록 초기화됩니다.

2단계 - 문자열 탐색을 시작합니다.

3단계 - 현재 문자가 숫자인 경우 "num"을 0으로 초기화하여 숫자를 저장합니다.

3.1단계 − p번째번째 인덱스에 있는 문자가 숫자이면 알파벳 문자나 대괄호를 얻을 때까지 문자열을 반복합니다. 루프 내에서 "num"의 이전 값에 10을 곱하고 여기에 현재 숫자를 더합니다.

3.2단계− “p” 값을 1만큼 늘립니다.

3.3단계 - 숫자 값을 "instSt" 스택에 푸시합니다.

4단계 - p번째 인덱스의 문자가 오른쪽 괄호인 경우 다음 단계를 따르세요.

4.1단계 - 빈 문자열로 "temp_str"을 초기화합니다. 이후 'instSt'가 비어 있지 않으면 스택에서 최상위 정수를 팝합니다.

4.2단계 - 이제 왼쪽 대괄호를 얻거나 "strSt" 스택에서 스택이 비워질 때까지 루프를 사용합니다. 또한 "temp_str"에 문자를 추가합니다.

4.3단계 - "["로 인해 문자 똥이 멈췄다면 제거하세요.

4.4단계 - 다음으로 "응답" 문자열에 "temp_Str" "num"번을 추가해야 합니다.

4.5단계 - "답변" 문자열의 각 문자를 "strSt" 스택에 삽입하고 빈 문자열로 다시 초기화합니다.

5단계 − 현재 문자가 왼쪽 괄호인 경우 다음 단계를 따르세요.

5.1단계 − 이전 문자가 숫자인 경우 "["를 스택 "StrSt"에 푸시합니다. 그렇지 않으면 "["를 StrSt 스택에 푸시하고 1을 "instSt" 스택에 푸시합니다.

6단계− 알파벳 문자를 얻으면 "strSt" 스택에 푸시합니다.

7단계 - 마지막으로 루프를 사용하여 "strSt" 스택에서 모든 문자를 제거하고 "답변" 문자열에 추가한 후 반환합니다.

으아악

출력

으아악

시간 복잡도− O(n^2) 왜냐하면 문자열을 반복하면서 스택에 요소를 계속해서 밀고 터뜨리기 때문입니다.

Space Complexity− 스택에 요소를 저장하기 위한 O(n)입니다.

방법 2

이 방법에서는 스택을 사용하지 않고 문제를 해결해 보겠습니다. 또한 reverse() 메서드를 사용하여 문자열을 반전합니다.

알고리즘

1단계 - 문자열 반복을 시작합니다.

2단계− i번째 문자가 "]"인 경우 "답변" 문자열에 삽입합니다. 그렇지 않은 경우 아래 단계를 따르세요.

3단계 - 빈 문자열로 "temp_Str"을 초기화합니다.

4단계 - 문자열이 비어 있거나 "[" 문자가 발견될 때까지 "답변" 문자열을 계속 반복합니다. 또한 "답변" 문자열에서 마지막 문자를 계속해서 꺼내어 "temp_Str" 문자열에 추가합니다.

5단계 - "]" 대괄호를 찾은 위치에서 뒤로 이동하면서 "temp_Str" 문자열을 반대로 바꿉니다.

6단계 - "답변" 문자열에서 마지막 문자를 제거하여 "[" 문자를 제거합니다.

第 7 步- 如果“答案”字符串顶部包含数字,则使用数字生成一个整数,并将其存储在 number 变量中。

第 8 步- 反转数字字符串。

第 9 步- 使用 stoi() 方法将字符串转换为数字。

步骤 10 - 将 temp_Str 字符串附加到答案字符串“number”次。

第 11 步- 返回“答案”字符串。

示例

#include <bits/stdc++.h>
using namespace std;

string decodeTheString(string alpha) {
    string answer = "";
    // iterate the string characters
    for (int i = 0; i < alpha.length(); i++) {
        // for all other characters except the closing bracket
        if (alpha[i] != ']') {
            answer.push_back(alpha[i]);
        } else {
            // Extract the substring lying within the pair
            string temp_str = "";
            // Keep on popping characters until '[' is found.
            while (!answer.empty() && answer.back() != '[') {
                temp_str.push_back(answer.back());
                answer.pop_back();
            }
            // get original string by reversing the string
            reverse(temp_str.begin(), temp_str.end());
            // open bracket removal
            answer.pop_back();
            // get integer value before the '[' character
            string number = "";
            // get the number before opening bracket
            while (!answer.empty() && answer.back() >= '0' && answer.back() <= '9') {
                number.push_back(answer.back());
                answer.pop_back();
            }
            // reverse number string
            reverse(number.begin(), number.end());
            // convert string to integer
            int numInt = stoi(number);
            for (int p = 0; p < numInt; p++) {
                answer += temp_str;
            }
        }
    }
    return answer;
}
int main() {
    string str = "2[d]3[c2[n]]";
    cout << "The resultant string after decoding it is - " << decodeTheString(str) << endl;
    return 0;
}
로그인 후 복사

输出

The resultant string after decoding it is − ddcnncnncnn
로그인 후 복사

时间复杂度− O(N^2),因为我们遍历字符串并在循环内使用reverse()方法。

空间复杂度− O(N) 来存储数字和临时字符串。

위 내용은 카운트 뒤에 하위 문자열이 따라오는 방식으로 인코딩된 문자열을 재귀적으로 디코딩합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

C++ 함수의 재귀 구현: 재귀 깊이에 제한이 있나요? C++ 함수의 재귀 구현: 재귀 깊이에 제한이 있나요? Apr 23, 2024 am 09:30 AM

C++ 함수의 재귀 깊이에는 제한이 있습니다. 이 제한을 초과하면 스택 오버플로 오류가 발생합니다. 제한 값은 시스템과 컴파일러에 따라 다르지만 일반적으로 1,000에서 10,000 사이입니다. 솔루션에는 다음이 포함됩니다. 1. 테일 재귀 최적화, 2. 테일 호출, 3. 반복 구현.

C++ 람다 표현식은 재귀를 지원합니까? C++ 람다 표현식은 재귀를 지원합니까? Apr 17, 2024 pm 09:06 PM

예, C++ Lambda 표현식은 std::function을 사용하여 재귀를 지원할 수 있습니다. std::function을 사용하여 Lambda 표현식에 대한 참조를 캡처합니다. 캡처된 참조를 사용하면 Lambda 표현식이 자신을 재귀적으로 호출할 수 있습니다.

Java에서 부분 문자열의 발생 횟수를 재귀적으로 계산합니다. Java에서 부분 문자열의 발생 횟수를 재귀적으로 계산합니다. Sep 17, 2023 pm 07:49 PM

두 개의 문자열 str_1과 str_2가 주어졌습니다. 목표는 재귀 프로시저를 사용하여 문자열 str1에서 하위 문자열 str2의 발생 횟수를 계산하는 것입니다. 재귀 함수는 정의 내에서 자신을 호출하는 함수입니다. str1이 "Iknowthatyouknowthatiknow"이고 str2가 "know"인 경우 발생 횟수는 -3입니다. 예를 들어 str1="TPisTPareTPamTP", str2="TP"를 입력하면 Countofoccurrencesofasubstringrecursi가 출력됩니다.

C++ 함수의 재귀적 구현: 재귀적 알고리즘과 비재귀적 알고리즘의 비교 분석? C++ 함수의 재귀적 구현: 재귀적 알고리즘과 비재귀적 알고리즘의 비교 분석? Apr 22, 2024 pm 03:18 PM

재귀 알고리즘은 함수 자체 호출을 통해 구조화된 문제를 해결하지만 간단하고 이해하기 쉽다는 장점이 있지만 효율성이 떨어지고 스택 오버플로가 발생할 수 있다는 단점이 있습니다. 스택 데이터 구조의 장점은 더 효율적이고 스택 오버플로를 방지한다는 것입니다. 단점은 코드가 더 복잡할 수 있다는 것입니다. 재귀적 또는 비재귀적 선택은 문제와 구현의 특정 제약 조건에 따라 달라집니다.

지식 그래프: 대형 모델을 위한 이상적인 파트너 지식 그래프: 대형 모델을 위한 이상적인 파트너 Jan 29, 2024 am 09:21 AM

LLM(대형 언어 모델)은 매끄럽고 일관된 텍스트를 생성하는 기능을 갖추고 있어 인공 지능 대화 및 창의적 글쓰기와 같은 영역에 새로운 전망을 제시합니다. 그러나 LLM에는 몇 가지 주요 제한 사항도 있습니다. 첫째, 그들의 지식은 훈련 데이터에서 인식된 패턴으로 제한되어 있으며 세상에 대한 진정한 이해가 부족합니다. 둘째, 추론 능력이 제한되어 있어 여러 데이터 소스에서 논리적 추론을 하거나 사실을 융합할 수 없습니다. 더 복잡하고 개방형 질문에 직면할 때 LLM의 답변은 "환상"이라고 알려진 터무니없거나 모순될 수 있습니다. 따라서 LLM은 일부 측면에서 매우 유용하지만 복잡한 문제와 실제 상황을 처리할 때 여전히 특정 제한 사항이 있습니다. 이러한 격차를 해소하기 위해 최근 몇 년 동안 검색 증강 생성(RAG) 시스템이 등장했습니다.

C++ 함수 재귀에 대한 자세한 설명: 문자열 처리에 재귀 적용 C++ 함수 재귀에 대한 자세한 설명: 문자열 처리에 재귀 적용 Apr 30, 2024 am 10:30 AM

재귀 함수는 문자열 처리 문제를 해결하기 위해 자신을 반복적으로 호출하는 기술입니다. 무한 재귀를 방지하기 위해서는 종료 조건이 필요합니다. 재귀는 문자열 반전 및 회문 검사와 같은 작업에 널리 사용됩니다.

몇 가지 일반적인 인코딩 방법 몇 가지 일반적인 인코딩 방법 Oct 24, 2023 am 10:09 AM

일반적인 인코딩 방법에는 ASCII 인코딩, 유니코드 인코딩, UTF-8 인코딩, UTF-16 인코딩, GBK 인코딩 등이 포함됩니다. 자세한 소개: 1. ASCII 인코딩은 7비트 이진수를 사용하여 영어 문자, 숫자, 구두점, 제어 문자 등을 포함하여 128개의 문자를 나타내는 최초의 문자 인코딩 표준입니다. 2. 유니코드 인코딩은 표현하는 데 사용되는 방법입니다. 세상의 모든 문자 각 문자에 고유한 디지털 코드 포인트를 할당하는 문자의 표준 인코딩 방법 3. UTF-8 인코딩 등

C 언어 프로그래밍에서 한자의 인코딩 및 디코딩을 구현하는 방법은 무엇입니까? C 언어 프로그래밍에서 한자의 인코딩 및 디코딩을 구현하는 방법은 무엇입니까? Feb 19, 2024 pm 02:15 PM

현대 컴퓨터 프로그래밍에서 C 언어는 가장 일반적으로 사용되는 프로그래밍 언어 중 하나입니다. C 언어 자체는 중국어 인코딩 및 디코딩을 직접 지원하지 않지만 일부 기술과 라이브러리를 사용하여 이 기능을 달성할 수 있습니다. 이 기사에서는 C 언어 프로그래밍 소프트웨어에서 중국어 인코딩 및 디코딩을 구현하는 방법을 소개합니다. 먼저, 중국어 인코딩 및 디코딩을 구현하려면 중국어 인코딩의 기본 개념을 이해해야 합니다. 현재 가장 일반적으로 사용되는 중국어 인코딩 방식은 유니코드 인코딩입니다. 유니코드 인코딩은 각 문자에 고유한 숫자 값을 할당하므로 계산할 때

See all articles