Given a list of strings items and a query string query, return all items whose text contains query as a case-insensitive substring. Preserve the original order of matching items. If query is an empty string, return all items.
Example 1:
Input: items = ["Apple", "banana", "Grape", "Pineapple"], query = "app"
Output: ["Apple", "Pineapple"]
Explanation: Both strings contain "app" when compared case-insensitively.
Example 2:
Input: items = ["Doc Viewer", "Search", "Insights", "Notebook"], query = "s"
Output: ["Search", "Insights"]
Explanation: Only these items contain the letter "s" or "S".
1 <= len(items) <= 10^40 <= len(items[i]) <= 1000 <= len(query) <= 100items[i] consists of printable characters