여기에는 주어진 문자열의 영숫자 약어와 관련된 흥미로운 문제가 하나 있습니다. 문자열 길이가 10보다 작습니다. 모든 영숫자 약어를 인쇄합니다.
영숫자 약어는 숫자와 혼합된 문자 형태입니다. 해당 숫자의 값은 누락된 문자의 수입니다. 건너뛴 부분 문자열의 수에는 제한이 없습니다. 두 개의 하위 문자열이 서로 인접하지 않습니다. 아이디어를 얻을 수 있는 알고리즘을 살펴보겠습니다.
알고리즘
printAbbreviation(s, index, max, str) -
index가 max와 같으면 시작하고 str의 마지막에 s[index]를 추가하면 str end를 인쇄합니다. 비어 있지 않은 경우 str의 마지막 문자가 숫자이면 카운트 값과 함께 마지막 숫자를 추가합니다. end if end if str 뒤에 카운트를 추가하면 str end에서 마지막 문자를 삭제합니다. printAbbrevation(s, index + 1, max, str)end사전>예시
#include네임스페이스 사용 std;void printAbbreviation(const string&s, int index, int max_index, string str) { if (index ==max_index) { //문자열이 종료된 경우 cout < 출력
HELLOHELL1HEL1OHEL2HE1LOHE1L1HE2OHE3H1LLOH1LL1H1L1OH1L2H2LOH2L1H3OH41ELLO1ELL11EL1O1EL21E1LO1E1L11E2O1E32LLO2LL12L1O2L2