단어가 있다고 가정합니다. 우리는 단어의 일반화된 약어를 생성할 수 있는 함수를 정의해야 합니다.
따라서 입력이 "단어"와 같으면 출력은 ["단어", "1ord", "w1rd", "wo1d", "wor1", "2rd", "w2d", "wo2", " 1o1d", "1or1", "w1r1", "1o2", "2r1", "3d", "w3", "4"]
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
ret 배열 정의
-
solve() 함수를 정의하면 s, idx,
가 필요합니다. -
idx>=크기가 s이면 -
-
ret 끝에 s 삽입
-
반환
-
-
y :=인덱스 0에서 idx까지의 s의 부분 문자열 - 1
-
i :=y의 크기
-
num :=빈 문자열
-
동안 (i>=0 및 y[i] <='9'의 ASCII 및 y[i]>='0'의 ASCII), 수행 -
-
숫자 :=y[i] + 숫자
-
(i를 1 감소)
-
-
i가 y의 크기와 같지 않으면 -
-
ret :=인덱스에서 s의 부분 문자열(0부터 idx까지 - (y의 크기 - 1 - i) - 1) 문자열로 연결(숫자 + 1) 인덱스(0부터 idx까지)에서 s의 부분 문자열 연결
-
s1 :=숫자 + 1을 문자열로
-
s2 :=숫자를 문자열로
-
s1의 크기가 s2의 크기와 같으면 -
-
그렇지 않으면
-
해결(ret, idx + 1)
-
-
-
그렇지 않으면
-
이전 :=s[idx]
-
s[idx] :='1'
-
해결(들, idx + 1)
-
s[idx] :=이전
-
-
해결(들, idx + 1)
-
주요 방법에서 다음을 수행하십시오 -
-
해결(단어, 0)
-
리턴 렛
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#include네임스페이스 std;void print_vector(vector ret; 무효 해결(문자열 s, int idx){ if (idx>=s.size()) { ret.push_back(s); 반품; } 문자열 y =s.substr(0, idx); 정수 i =y.size() - 1; 문자열 번호 =""; 동안 (i>=0 &&y[i] <='9' &&y[i]>='0') { 숫자 =y[i] + 숫자; 나--; } if (i !=y.size() - 1) { string ret =s.substr(0, idx - (y.size() - 1 - i)) + to_string(stoi(num) + 1) + s .substr(idx + 1); 문자열 s1 =to_string(stoi(숫자) + 1); 문자열 s2 =to_string(stoi(숫자)); if (s1.size() ==s2.size()) solve(ret, idx); 그렇지 않으면 해결(ret, idx + 1); } else { 문자 이전 =s[idx]; s[idx] ='1'; 풀다(들, idx + 1); s[idx] =이전; } 풀다(들, idx + 1); } vector 입력
안녕하세요출력
<프리>[5, 4o, 3l1, 3lo, 2l2, 2l1o, 2ll1, 2llo, 1e3, 1e2o, 1e1l1, 1e1lo, 1el2, 1el1o, 1ell1, 1ello, h4, h3o, h2l1, hl1, h1 h1llo, he3, he2o, he1l1, he1lo, hel2, hel1o, hell1, 안녕하세요, ]