Khó 0 đã giải Tỷ lệ chấp nhận 0%

Minimum Window Substring

Find the shortest piece of text containing all required characters.

Bạn sẽ học được gì

  • Mở rộng và thu hẹp cửa sổ trên văn bản
  • Theo dõi số lần cần của mỗi ký tự
  • Tìm cửa sổ hợp lệ ngắn nhất

Đề 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ụ

Ví dụ 1
Đầ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.

Ví dụ 2
Đầ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.

Học hỏi từ người khác

Giải pháp cộng đồng

Chưa có giải pháp nào được chia sẻ. Hãy giải thử thách này để đăng giải pháp đầu tiên.