Đề bài
Find the shortest contiguous substring of text that contains every character of pattern, including repeats. If several are equally short, return the leftmost.
Implement min_window(text, pattern).
Input
text: The text to search. pattern: The characters that must appear.
Output
Return the shortest window, or an empty string if none exists.
Ràng buộc
1 ≤ length of text, pattern ≤ 100,000 (ASCII)
Ví dụ
Đầu vào:
text = "ADOBECODEBANC"
pattern = "ABC"
Kết quả mong đợi:
expected = "BANC"
Đầu vào:
std::string text = "ADOBECODEBANC";
std::string pattern = "ABC";
Kết quả mong đợi:
std::string expected = "BANC";
Đầu vào:
string text = "ADOBECODEBANC";
string pattern = "ABC";
Kết quả mong đợi:
string expected = "BANC";
Giải thích
"BANC" contains A, B and C and nothing shorter does.
Đầu vào:
text = "a"
pattern = "aa"
Kết quả mong đợi:
expected = ""
Đầu vào:
std::string text = "a";
std::string pattern = "aa";
Kết quả mong đợi:
std::string expected = "";
Đầu vào:
string text = "a";
string pattern = "aa";
Kết quả mong đợi:
string expected = "";
Giải thích
Two a's are needed but the text has only one: "".
Hướng tiếp cận
Hãy tự thử trước, sau đó mở từng gợi ý một.
Gợi ý 1
Cửa sổ phải chứa đủ số lượng của mọi ký tự cần thiết, không chỉ số ký tự phân biệt.
Gợi ý 2
Mở rộng cho đến khi hợp lệ, rồi thu hẹp từ trái để bỏ các ký tự thừa mà vẫn giữ tính hợp lệ.
Gợi ý 3
Nếu nhiều cửa sổ có cùng độ dài nhỏ nhất, hãy giữ cửa sổ xuất hiện sớm nhất khi cập nhật đáp án tốt nhất.
Độ phức tạp mong đợi
thời gian O(n), bộ nhớ phụ O(1)
Tham khảo
Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.