문자열 str1이 입력으로 주어졌습니다. 목표는 입력 문자열에서 동일한 문자 쌍 사이에 '*'를 삽입하고 재귀 접근 방식을 사용하여 결과 문자열을 반환하는 것입니다.
입력 문자열이 str1="wellness"인 경우 그러면 출력은 "well*lnes*s"가 됩니다.
예시
입력 − str1="행복"
출력 − * 추가 후 문자열 :hap*pines*s
설명 − pp와 ss 쌍 사이에 *를 추가하면 결과 문자열 hap*pines*s가 생성됩니다.
입력 − str1="수영장"
출력 − * 추가 후 문자열 :swim*m*m*ming*g*g*g po*o*o*ol
설명 − mm, gg 및 oo 쌍 사이에 *를 추가하면 결과 문자열이 제공됩니다. swim*m*m*ming*g*g*g po*o*o*ol
아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.
이 접근 방식에서는 문자열 str1을 사용합니다. 각 반복에서 str1을 현재 인덱스를 중간 지점으로 두 개로 나눕니다. 첫 번째 부분 문자열의 마지막 문자가 다음 부분 문자열의 첫 번째 문자와 같으면 원래 문자열을 부분 문자열 1로 설정하고 '*' 다음에 부분 문자열 2가 옵니다. substring2의 길이가 0인 경우 재귀를 종료합니다.
-
입력 문자열을 str1로 가져오고 길이를 len으로 계산합니다.
-
함수 addStar(string&s1, int i, int len1)는 s1, 길이 및 현재 인덱스를 입력으로 취하고 두 쌍의 문자가 같으면 *를 추가합니다.
-
인덱스 0에서 i까지 s1의 부분 문자열로 tmp1을 가져옵니다.
-
tmp2를 인덱스 i에서 len1 + 1까지 s1의 부분 문자열로 가져옵니다.
-
tmp1의 마지막 문자와 tmp2의 첫 번째 문자가 같으면 s1=tmp1+'*'+tmp2로 설정합니다.
-
addStar(s1, i+1, len1)를 호출합니다. 다음 반복을 위해.
-
마지막에 main 내부의 str1을 인쇄합니다.
예시
#include <iostream> using namespace std; void addStar(string& s1, int i, int len1){ string tmp1=s1.substr(0,i); string tmp2=s1.substr(i,len1+1); if (tmp2.length() == 0){ return; } if (tmp1[i-1] == tmp2[0]){ s1 = tmp1 + '*' + tmp2; } addStar(s1, i+1, len1); } int main(){ string str1 = "aabbcccdddd"; int len=str1.length(); addStar(str1, 0, len-1); cout << "String after adding * : "<<str1 << endl; return 0; }
출력
위의 코드를 실행하면 다음과 같은 출력이 생성됩니다.
String after adding * : a*ab*bc*c*cd*d*d*d