TopcoderArchiveVisit Topcoder
SRM26 Oct 2005
SRM 269

PatternOptimizer

Problem statement, definition, constraints, and public examples.

Problem Statement

Some dictionaries use a word pattern that consists of letters, '?' symbols which each denote exactly one letter, and '*' symbols which each denote zero or more letters.

Interestingly, some patterns represent the same set of words. For example, "*??*a" and "?*?a" (quotes for clarity only) patterns both represent all words that consist of three or more letters and end with 'a'.

You will be given a String pattern. Your method should return the shortest pattern that represents the same set of words as the given pattern. Return the lexicographically first in case of tie.

Definition

Class:
PatternOptimizer
Method:
optimize
Parameters:
String
Returns:
String
Method signature:
String optimize(String pattern)
(be sure your method is public)

Notes

  • Note that '*' comes before '?' in the lexicographical order.

Constraints

  • pattern will contain between 1 and 50 characters, inclusive.
  • pattern will contain only letters ('a'-'z', 'A'-'Z'), '?' and '*'.

Examples

  1. "*??*a"
    Returns: "*??a"
  2. "*b**a*"
    Returns: "*b*a*"
  3. "cla??"
    Returns: "cla??"
  4. "*?*?*?*"
    Returns: "*???"
  5. "T***nd?*"
    Returns: "T*nd*?"
Back to all problems