이것은 매우 모호한 질문으로 전환 0515
로하라는 메시지가 표시되지 않습니다. 다시 말하면, A3
을 AAA
으로 디코딩하고 그 자리에 글자를 쓰면 문자 B
과 1
을 덮어 쓰게됩니다. 그래서 먼저 배열을 따라 더 멀리 이동하지 않는 것이 어떻습니까?
예를 들어, A3
을 읽은 후에는 여분의 문자 한 개를 넣을 공간이 필요하다는 것을 알 수 있습니다. A4
이면 두 개가 필요합니다. 이것을 달성하기 위해 배열에서 문자열의 끝을 찾을 수 있습니다 (이 작업은 미리 수행하고 인덱스를 저장합니다).
그런 다음 루프하지만, 그들의 새로운 슬롯 문자를 이동 :
시작하려면 A|3|B|1|C|2|||||||
즉 마지막으로, 공백이 아닌, 엔트리 인덱스 5, 저장 end
라는 변수 되세요.
당신은 당신의 현재 위치를 저장하는 cursor
라는 변수를 사용하여 첫 번째 쌍에서 읽은 것 - 그래서 A
과 3
가합니다 (3 슬롯)을 1로 설정 될 수에서 읽은 후. 이동 대
의사 코드 :
VAR의 N = 배열 [커서] - 2; // n = 1, A3에서 3, 그리고 쌍을 허용하려면 2입니다.
for (i = end; i> 커서; i ++) { array [i + n] = array [i];
: 그래서 지금 당신이
n + 1
A
's이 (가)
cursor
에 저장된 인덱스부터 시작하여 쓰고 싶은,
A|3|A|3|B|1|C|2|||||
이제 A
이미 한 번있다 : }
이 당신을 떠날 것이다
for(i = cursor; i < cursor + n + 1; i++)
{
array[i] = array[cursor - 1];
}
// increment the cursor afterwards!
cursor += n + 1;
주는 :
A|A|A|A|B|1|C|2|||||
다음 값 쌍 시작 위치를 가리키며 다시 준비가됩니다. 나는이 답변에 몇 가지 구멍이 있음을 알고 있습니다.하지만 이는 인터뷰 질문이기 때문에 의도적 인 것입니다!예를 들어, A1B1
으로 지정된 가장자리의 경우, 후속 문자를 전달하지 않고 뒤로 이동하려면 다른 루프가 필요합니다.
한 가지 제안은 배열의 끝에서 당신의 출력을 시작하고 거꾸로 작동하는 것입니다. – user1118321
"in-place"와 사용할 언어를 정의하십시오. 이것은 PHP에서'preg_replace_callback'을 사용하면 아주 간단합니다. PHP의 추상화 수준에서 언어를 사용할 수있는 "적절한 위치"입니다. – deceze
제자리에서, 다른 배열을 사용하여 출력을 쓰지 않는 것을 의미합니다. 임시 변수를 사용하는 것이 좋습니다. 언어는 C/C++가 될 것입니다. @ user1118321 : 여전히 원래의 인코딩 된 문자열 값을 덮어 쓸 수 있기 때문에 작동하지 않습니다. 예 : "A1B1". 마지막 위치에 'A'를 쓰면 'B'옆에 '1'을 덮어 씁니다. – Bugaboo