Đây là một câu hỏi rất mơ hồ, mặc dù nó không phải là đặc biệt khó khăn nếu bạn nghĩ về nó. Như bạn nói, giải mã A3
là AAA
và chỉ viết nó vào vị trí sẽ ghi đè các ký tự B
và 1
, vậy tại sao không chỉ di chuyển xa hơn dọc theo mảng trước?
Ví dụ: khi bạn đã đọc A3
, bạn biết rằng bạn cần tạo khoảng trống cho một ký tự phụ, nếu đó là A4
bạn cần hai, v.v. Để đạt được điều này bạn sẽ tìm thấy kết thúc của chuỗi trong mảng (làm điều này trả trước và lưu trữ chỉ mục của nó).
Sau đó, vòng lặp, mặc dù di chuyển nhân vật đến khe mới của họ:
Để bắt đầu: A|3|B|1|C|2|||||||
Có một biến gọi là end
lưu trữ các chỉ số 5, ví dụ cuối cùng, không trống, nhập cảnh.
Bạn đã đọc trong cặp đầu tiên, sử dụng biến số cursor
để lưu trữ vị trí hiện tại của bạn - vì vậy sau khi đọc trong A
và 3
, nó sẽ được đặt thành 1 (vị trí bằng 3).
Mã giả để di chuyển:
var n = array [cursor] - 2; // n = 1, số 3 từ A3, và sau đó trừ đi 2 để cho phép cặp.
cho (i = kết thúc; i> con trỏ; i ++) { mảng [i + n] = mảng [i]; }
này sẽ để lại cho bạn với:
A|3|A|3|B|1|C|2|||||
Bây giờ A
là có một lần rồi, vì vậy bây giờ bạn muốn viết n + 1
A
's bắt đầu từ chỉ số lưu trữ trong cursor
:
for(i = cursor; i < cursor + n + 1; i++)
{
array[i] = array[cursor - 1];
}
// increment the cursor afterwards!
cursor += n + 1;
Tặng:
A|A|A|A|B|1|C|2|||||
Sau đó, bạn chỉ vào đầu cặp giá trị tiếp theo, sẵn sàng quay lại. Tôi nhận ra có một số lỗ hổng trong câu trả lời này, mặc dù đó là cố ý vì nó là một câu hỏi phỏng vấn!Ví dụ: trong các trường hợp cạnh bạn đã chỉ định A1B1
, bạn sẽ cần một vòng lặp khác để di chuyển các ký tự tiếp theo về sau chứ không phải chuyển tiếp.
Một gợi ý sẽ được bắt đầu sản lượng của bạn vào cuối mảng và làm việc về phía sau. – user1118321
Vui lòng xác định "tại chỗ" và ngôn ngữ sẽ được sử dụng. Điều này là tầm thường với một 'preg_replace_callback' trong PHP, đó là về" tại chỗ "như bạn có thể nhận được với các ngôn ngữ ở mức trừu tượng đó. – deceze
Bởi tại chỗ, tôi có nghĩa là không sử dụng một mảng để viết đầu ra. Bạn có thể sử dụng các biến tạm thời. Ngôn ngữ sẽ là C/C++. @ user1118321: Điều đó sẽ không hoạt động vì bạn vẫn có thể ghi đè các giá trị của chuỗi được mã hóa ban đầu. Ví dụ: "A1B1". Viết 'A' đến vị trí cuối cùng sẽ ghi đè '1' bên cạnh 'B'. – Bugaboo