카운트 뒤에 하위 문자열이 따라오는 방식으로 인코딩된 문자열을 재귀적으로 디코딩합니다.
이 문제에서는 총 횟수를 반복적으로 더하여 주어진 문자열을 디코딩해야 합니다.
우리는 세 가지 다른 방식으로 문제에 접근할 수 있으며 문제를 해결하기 위해 두 개의 스택 또는 하나의 스택을 사용할 수 있습니다. 또한 두 개의 스택을 사용하지 않고도 문제를 해결할 수 있습니다.
문제 설명 - 왼쪽 및 오른쪽 대괄호, 영문자 및 숫자가 포함된 문자열 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











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

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

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

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

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

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

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

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