Cho hai chuỗi. Tạo chuỗi nhỏ nhất theo thứ tự từ điển bằng cách lần lượt so sánh ký tự đầu của hai chuỗi, lấy ký tự nhỏ hơn (nếu bằng nhau lấy từ chuỗi đầu). Lặp cho đến khi cả hai rỗng.
Ví dụ: , → kết quả .
Quá trình: so sánh 'T' vs 'P' → lấy 'P', tiếp 'T' vs 'O' → lấy 'O', ... cuối cùng chuỗi 2 hết, nối toàn bộ chuỗi 1 còn lại.
Thuật toán giải quyết (Hai con trỏ + So sánh chuỗi con)
- Thêm ký tự 'z' (lớn nhất) vào cuối cả hai chuỗi làm sentinel
- Hai con trỏ
, kết quả - Khi cả hai con trỏ chưa hết:
- So sánh chuỗi con từ con trỏ:
- Lấy ký tự từ chuỗi nhỏ hơn, tiến con trỏ đó
- So sánh chuỗi con từ con trỏ:
- Loại bỏ sentinel 'z' cuối
- Nối phần còn lại của chuỗi nào chưa hết
Ví dụ minh họa
def solve(input_1, input_2):
input_1 += "z"
input_2 += "z"
temp_1 = 0
temp_2 = 0
res_str = ""
while temp_1 < len(input_1) and temp_2 < len(input_2):
if input_1[temp_1:] < input_2[temp_2:]:
res_str += input_1[temp_1]
temp_1 += 1
else:
res_str += input_2[temp_2]
temp_2 += 1
res_str = res_str[:-1]
if temp_1 < len(input_1):
res_str += input_1[temp_1:-1]
if temp_2 < len(input_2):
res_str += input_2[temp_2:-1]
return res_str
print(solve('TUTORIALS', 'POINT'))
Đầu vào
'TUTORIALS', 'POINT'
Đầu ra
POINTTUTORIALS