Bạn sẽ không thể tìm thấy giải pháp phức tạp hơn O (n) vì bạn cần phải vượt qua mọi ký tự trong trường hợp xấu nhất với chuỗi đầu vào có tối đa 0 hoặc 1 khoảng trống liên tiếp, hoặc là khoảng trắng hoàn toàn.
Tuy nhiên, bạn có thể thực hiện một số tối ưu hóa nhưng vẫn được coi là O (n).
Ví dụ:
Cho M là kết quả dài nhất hiện tại cho đến khi bạn đi qua danh sách của mình. Cũng giả sử bạn có thể truy cập các phần tử đầu vào trong O (1), ví dụ bạn có một mảng làm đầu vào.
Khi bạn nhìn thấy khoảng trắng, bạn có thể bỏ qua phần tử M nếu current + M
là khoảng trắng. Chắc chắn không có khoảng trắng dài hơn M có thể chứa bên trong.
Và khi bạn nhìn thấy một ký tự trắng, nếu current + M-1
không phải là khoảng trắng bạn biết bạn không có chạy dài nhất o bạn cũng có thể bỏ qua trong trường hợp đó.
Nguồn
2010-04-11 12:11:10
(-1) Điều đó sai: bạn không phải kiểm tra từng ký tự. –
Nếu chuỗi chỉ chứa các ký tự trống, vui lòng cho tôi biết cách bạn sẽ không kiểm tra từng ký tự. –
Với "ít nhất" bạn có nghĩa là "nhiều nhất", tôi đoán :) – Thomas