Statistics

Problem Statement for "PhoneNumbers"

Problem Statement

You are given a String number containing the digits of a phone number. To help you memorize the number, you want to divide it into groups of contiguous digits. Each group must contain exactly 2 or 3 digits. There are three kinds of groups:

  • Excellent: A group that contains only the same digits. For example, 000 or 77.
  • Good: A group of 3 digits, 2 of which are the same. For example, 030, 229 or 166.
  • Usual: A group in which all the digits are distinct. For example, 123 or 90.

The quality of a group assignment is defined as 2 * (number of excellent groups) + (number of good groups). Divide the number into groups such that the quality is maximized, and return the result as a String, where each pair of consecutive groups is separated by a dash ('-'). If there are multiple ways to do this, return the one among them that results in the lexicographically earliest String.

Definition

Class:
PhoneNumbers
Method:
bestNumber
Parameters:
String
Returns:
String
Method signature:
String bestNumber(String number)
(be sure your method is public)

Notes

  • A String A comes before a String B lexicographically if A is a proper prefix of B, or if A has a smaller character at the first position where the strings differ. When comparing the characters, refer to the following list of characters in ascending order: '-', '0', '1', ..., '9'.

Constraints

  • number will contain between 2 and 50 characters, inclusive.
  • Each character in number will be a digit ('0'-'9').

Examples

  1. "5088638"

    Returns: "50-88-638"

    There are three possible ways to divide this number into groups: 508-86-38 (quality 0), 50-886-38 (quality 1) and 50-88-638 (quality 2). The last option is the best one.

  2. "0123456789"

    Returns: "01-23-45-67-89"

    No matter how you divide this number, the quality will be 0. Choose the division that comes earliest lexicographically.

  3. "09"

    Returns: "09"

    With a 2-digit phone number, there is only one choice.

  4. "54545454545454545454"

    Returns: "54-545-454-545-454-545-454"

    The best way to divide this number is to create six 3-digit good groups and one 2-digit usual group. Put the 2-digit group at the beginning to achieve the lexicographically earliest result.

  5. "00110001011100010111"

    Returns: "00-11-00-010-11-10-00-101-11"

  6. "10100101001100000011011100110000001001111001010011"

    Returns: "101-00-101-00-11-00-00-00-11-01-11-00-11-00-00-00-100-11-11-00-101-00-11"

  7. "91541585136456487689164799429009697882094458654314"

    Returns: "91-541-585-13-64-56-48-76-89-16-47-99-429-00-96-97-88-209-44-58-65-43-14"

  8. "99999999999999999999999999999999999999999999999999"

    Returns: "99-99-99-99-99-99-99-99-99-99-99-99-99-99-99-99-99-99-99-99-99-99-99-99-99"

  9. "0000000000000000000000000000000000000000000000000"

    Returns: "00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-000"

  10. "20011200111020001102210200010100021022211200221120"

    Returns: "200-11-200-111-020-00-11-02-21-020-00-101-00-02-10-222-11-200-22-11-20"

  11. "01311313120232332023201321001022311313000022022320"

    Returns: "013-11-313-120-232-33-20-232-01-321-00-10-22-311-313-00-00-22-022-320"

  12. "14334202334111313314110303311030220040424003224230"

    Returns: "14-33-42-02-33-41-11-31-33-14-11-030-33-11-030-22-00-40-424-00-32-242-30"

  13. "13513050553545130133034452035214302203214415405435"

    Returns: "13-513-050-55-35-45-13-01-33-03-44-52-03-52-14-30-22-03-21-44-15-40-54-35"

  14. "54146626261160633556612150312454536333106263425205"

    Returns: "54-14-66-26-26-11-606-33-55-66-121-50-31-24-545-363-33-10-626-34-252-05"

  15. "24200114065714171077426260745217015737774105631556"

    Returns: "242-00-11-40-657-141-710-77-42-626-07-45-21-70-15-737-77-41-05-631-556"

  16. "55340367187830150580064234118776250778107816820780"

    Returns: "55-34-03-671-878-30-15-058-00-64-234-11-877-62-50-77-81-07-81-68-20-780"

  17. "34154334"

    Returns: "34-154-334"

  18. "306373"

    Returns: "306-373"

  19. "01134023"

    Returns: "011-34-023"

  20. "00010201200010043100010000241020061101022000010301"

    Returns: "00-01-020-12-00-01-00-431-00-01-00-00-24-102-00-611-010-22-00-00-10-301"

  21. "000"

    Returns: "000"

  22. "02203302132"

    Returns: "02-20-33-02-132"

  23. "000101110011001111010010111111111001101"

    Returns: "00-010-111-00-11-00-11-11-01-00-101-11-11-11-11-00-11-01"

  24. "0010"

    Returns: "00-10"

  25. "42200132120320321102334320144302414414"

    Returns: "422-00-13-212-03-20-32-11-02-33-43-201-44-30-241-44-14"

  26. "2211002212120"

    Returns: "22-11-00-22-121-20"

  27. "220002010020011100220222221100121200211120010012"

    Returns: "22-00-02-01-00-200-111-00-22-02-22-22-11-00-12-12-00-21-11-20-01-00-12"

  28. "485023477846544251846166150463"

    Returns: "48-50-234-77-84-65-44-25-18-461-66-15-04-63"

  29. "57773653582110375248062255372"

    Returns: "57-77-36-535-82-11-03-75-24-806-22-55-372"

  30. "2156456720365164274463"

    Returns: "21-56-45-67-20-36-51-64-27-44-63"

  31. "11101"

    Returns: "11-101"

  32. "32200"

    Returns: "322-00"

  33. "510302"

    Returns: "51-03-02"

  34. "244143"

    Returns: "244-143"

  35. "0304313"

    Returns: "03-04-313"

  36. "7716173"

    Returns: "77-161-73"

  37. "0770637"

    Returns: "077-06-37"

  38. "11111210"

    Returns: "11-11-12-10"

  39. "45040104"

    Returns: "45-040-104"

  40. "14044140"

    Returns: "140-44-140"

  41. "14503021"

    Returns: "145-030-21"

  42. "00111100111000011110000000000011110000001111000000"

    Returns: "00-11-11-00-111-00-00-11-11-00-00-00-00-000-11-11-00-00-00-11-11-00-00-00"

  43. "12111002200110001211112212100011001100002200002211"

    Returns: "121-11-00-22-00-11-00-012-11-11-22-121-000-11-00-11-00-00-22-00-00-22-11"

  44. "33330111122112223300311331133110010331133113003000"

    Returns: "33-33-011-11-22-11-222-33-00-311-33-11-33-11-00-10-33-11-33-11-30-030-00"

  45. "44231111223310000011000021234334433341104404001133"

    Returns: "44-23-11-11-22-33-10-00-00-11-00-00-212-34-33-44-33-34-11-04-404-00-11-33"

  46. "55021142455220331144252001133113312114425442145211"

    Returns: "55-02-11-424-55-22-033-11-44-252-00-11-33-11-33-12-11-44-25-44-21-452-11"

  47. "22245566611552121435502631114211661060666622554411"

    Returns: "22-24-55-666-11-55-212-143-55-02-63-11-142-11-66-10-60-66-66-22-55-44-11"

  48. "55007224403646615451533337733615330704561144745500"

    Returns: "55-00-722-44-03-64-66-154-515-33-33-77-33-615-33-070-456-11-44-74-55-00"

  49. "77001888343843664400676131000406773440032887355886"

    Returns: "77-00-18-88-343-843-66-44-00-676-131-00-04-06-77-344-00-32-88-73-55-886"

  50. "99262708866116611056449926544662599777846012777668"

    Returns: "99-262-70-88-66-11-66-11-056-44-99-265-44-66-25-99-77-78-46-01-27-77-668"

  51. "01010100100100010101101110101000101011010101001001"

    Returns: "010-101-00-10-01-00-01-010-11-01-11-01-01-00-01-010-11-010-101-00-10-01"

  52. "20202101210121201201010112010102102101021201121221"

    Returns: "20-202-10-12-101-212-01-201-010-11-20-101-02-10-21-010-21-20-11-21-221"

  53. "23012312021201310321302321201203213011132332010320"

    Returns: "23-01-231-202-120-131-03-21-30-23-212-01-20-32-13-01-11-32-33-20-10-320"

  54. "20431403202132320143043042142432103142323240342341"

    Returns: "20-43-14-03-202-13-232-01-43-04-30-421-424-32-10-31-42-323-24-03-42-341"

  55. "05150525041341204230132102130534053241203431203120"

    Returns: "05-150-525-04-13-41-20-42-30-13-21-02-13-05-34-05-32-41-20-343-12-03-120"

  56. "06251456340216512014563140101645203513062465164204"

    Returns: "06-25-14-56-34-02-16-51-20-14-56-31-40-101-64-52-03-51-30-62-46-51-64-204"

  57. "47607342675370560475205370631042351645026456247315"

    Returns: "47-60-73-42-67-53-70-56-04-75-20-53-70-63-10-42-35-16-45-02-64-56-24-73-15"

  58. "67561285025743243613854671378130758735246374804143"

    Returns: "67-56-12-85-02-57-43-24-36-13-85-46-71-37-81-30-75-87-35-24-63-74-80-41-43"

  59. "81328760572401824356139218250470932078207218954065"

    Returns: "81-32-87-60-57-24-01-82-43-56-13-92-18-25-04-70-93-20-78-20-72-18-95-40-65"

  60. "10010011111011000100101101111100010011110100100000"

    Returns: "10-01-00-11-11-10-11-00-01-00-10-11-01-11-11-00-01-00-11-11-01-00-10-00-00"

  61. "00110212112012110111111011021101220212110102110002"

    Returns: "00-11-02-12-11-20-12-11-01-11-11-10-11-02-11-01-22-02-12-11-01-02-11-00-02"

  62. "01102211103211012011102221300023330022312022110322"

    Returns: "01-10-22-11-10-32-11-01-20-11-10-22-21-30-00-23-33-00-22-31-20-22-11-03-22"

  63. "21414421130013112200222341441240223242002303442400"

    Returns: "21-41-44-21-13-00-13-11-22-00-22-23-41-44-12-40-22-32-42-00-23-03-44-24-00"

  64. "03540052450342352333451351041340130433320314523041"

    Returns: "03-54-00-52-45-03-42-35-23-33-45-13-51-04-13-40-13-04-33-32-03-14-52-30-41"

  65. "31402532051162510032561123065142632250444061254214"

    Returns: "31-40-25-32-05-11-62-51-00-32-56-11-23-06-51-42-63-22-50-44-40-61-25-42-14"

  66. "74271467467507367522165024225433700033540627551243"

    Returns: "74-27-14-67-46-75-07-36-75-22-16-50-24-22-54-33-70-00-33-54-06-27-55-12-43"

  67. "72354308637108116341207750664876123105553207103148"

    Returns: "72-35-43-08-63-71-08-11-63-41-20-77-50-66-48-76-12-31-05-55-32-07-10-31-48"

  68. "25179966283561930427321934975065140596826587357342"

    Returns: "25-17-99-66-28-35-61-93-04-27-32-19-34-97-50-65-14-05-96-82-65-87-35-73-42"

  69. "01010101011101010110101111011000001011101011000101"

    Returns: "010-101-010-11-101-010-11-010-11-11-011-00-00-010-111-010-11-000-101"

  70. "11100122110121102212010120212102022200212010120220"

    Returns: "111-00-122-11-012-11-022-120-101-202-121-020-222-00-212-010-120-220"

  71. "12311211231202320323031223202021013232313301012002"

    Returns: "123-11-211-231-202-320-323-031-22-320-202-101-323-231-33-010-12-002"

  72. "02214231340312142143402030401033201040231343414020"

    Returns: "022-142-313-403-121-421-434-020-304-010-33-201-040-231-343-414-020"

  73. "20035304530353423215151512103144434052010505424313"

    Returns: "200-353-045-303-534-232-151-515-121-031-44-434-052-010-505-424-313"

  74. "16414153121512112410501216660255111606536353034335"

    Returns: "16-414-153-121-512-11-241-050-121-66-602-55-111-606-536-353-034-335"

  75. "54575201050514150526265436345014163752435631304522"

    Returns: "545-752-010-505-141-505-262-654-363-450-141-63-75-24-356-313-045-22"

  76. "63206071718346438430282787324418817108108042343837"

    Returns: "632-060-717-183-464-38-430-282-787-32-44-188-171-081-080-42-343-837"

  77. "20539414734731211123458564916135302954562607522833"

    Returns: "20-539-414-73-473-121-11-234-585-649-161-353-029-545-626-075-22-833"

  78. "11235813213455891442333776109871597258441816765"

    Returns: "11-23-58-13-21-34-55-891-44-23-33-77-61-09-87-15-97-258-44-181-67-65"

  79. "12481632641282565121024204840968192163843276865536"

    Returns: "12-48-16-32-641-282-565-121-02-420-484-09-68-19-21-63-84-327-686-55-36"

  80. "1234567891011121314151617181920212223242526272829"

    Returns: "12-34-56-78-910-11-121-314-151-617-181-92-021-22-23-242-526-272-829"

  81. "546565"

    Returns: "546-565"

  82. "01234567800123456780012345678001234567890123456780"

    Returns: "01-23-45-678-00-12-34-56-78-00-12-34-56-78-00-12-34-56-78-90-12-34-56-780"

  83. "54545454545454545454545454545454545454541234567890"

    Returns: "545-454-545-454-545-454-545-454-545-454-545-454-545-41-23-45-67-890"

  84. "545454545454545454548686868686868686868619191919"

    Returns: "54-545-454-545-454-545-454-86-868-686-868-686-868-686-19-191-919"

  85. "77777777777777777777777777777777777777777012345667"

    Returns: "77-77-77-77-77-77-77-77-77-77-77-77-77-77-77-77-77-77-77-77-70-12-345-667"

  86. "0101010101010101102020202020200022202200220002234"

    Returns: "010-101-010-101-010-11-020-202-020-202-000-22-20-22-00-22-000-22-34"

  87. "36753562912709360626187920237592289736129319478450"

    Returns: "367-535-62-91-27-09-360-626-18-79-202-37-59-22-89-73-61-29-31-94-78-450"

  88. "5355533535553"

    Returns: "535-55-33-53-55-53"

  89. "12233344235673355533355522244200990909341299883377"

    Returns: "122-333-44-23-567-33-55-53-33-55-52-22-44-200-99-090-93-412-99-88-33-77"

  90. "1234"

    Returns: "12-34"

  91. "01234567890123456789012345678901234567890123456789"

    Returns: "01-23-45-67-89-01-23-45-67-89-01-23-45-67-89-01-23-45-67-89-01-23-45-67-89"

  92. "55555555555555555555555555555555555555555555555555"

    Returns: "55-55-55-55-55-55-55-55-55-55-55-55-55-55-55-55-55-55-55-55-55-55-55-55-55"

  93. "00110001011100010111010101010101010100000111110101"

    Returns: "00-11-00-010-111-00-010-11-101-010-101-010-101-010-00-00-11-11-10-101"

  94. "1333327895457675678333332156733331"

    Returns: "133-33-27-89-545-767-56-78-33-33-32-15-67-33-331"

  95. "21346959187456038475620985692837456145908273658923"

    Returns: "21-346-959-18-74-56-03-84-75-62-09-85-69-28-37-45-61-45-90-82-73-65-89-23"

  96. "78956741085209630404001354368674657983213236365554"

    Returns: "78-95-67-41-08-52-09-630-404-00-13-543-686-74-65-79-83-21-323-636-55-54"

  97. "1111010010100010011111010010100001111010001101001"

    Returns: "11-11-01-00-101-00-01-00-11-11-101-00-101-00-00-11-11-010-00-11-01-001"

  98. "98745686496098432695862614965097638234665911123284"

    Returns: "98-745-686-49-60-98-43-26-958-626-14-96-50-97-63-82-34-66-59-111-232-84"

  99. "3456175745458483673782749297038306830682073627287"

    Returns: "34-56-17-574-545-848-36-737-82-74-929-70-383-06-83-06-82-07-36-272-87"

  100. "57476678767877743057776653097675657376567865656665"

    Returns: "57-47-66-78-76-787-77-43-05-777-66-53-09-767-565-737-656-786-565-66-65"

  101. "00112233445566778889912345678901928374650135790864"

    Returns: "00-11-22-33-44-55-66-77-888-99-12-34-56-78-90-19-28-37-46-50-13-57-90-864"

  102. "01234567899876543210002355578801234567899876543310"

    Returns: "01-23-45-678-99-87-65-43-21-00-023-55-57-88-01-23-45-678-99-87-654-33-10"

  103. "88888"

    Returns: "88-888"

  104. "001100010111000101001101010010010111"

    Returns: "00-11-00-010-11-10-00-101-00-11-01-01-00-100-101-11"

  105. "45345334533454555453434434545434554334554334543444"

    Returns: "45-345-33-45-33-454-55-545-343-44-34-545-434-55-43-34-55-433-45-434-44"

  106. "9191919191919191919191919191919"

    Returns: "91-91-919-191-919-191-919-191-919-191-919"

  107. "123456123456123456123456123456123456123456"

    Returns: "12-34-56-12-34-56-12-34-56-12-34-56-12-34-56-12-34-56-12-34-56"

  108. "12345678901234567890123456789012345678901234567890"

    Returns: "12-34-56-78-90-12-34-56-78-90-12-34-56-78-90-12-34-56-78-90-12-34-56-78-90"

  109. "22334455662233445566223344556622334455662233445566"

    Returns: "22-33-44-55-66-22-33-44-55-66-22-33-44-55-66-22-33-44-55-66-22-33-44-55-66"

  110. "1123545787364532453257294927364643874637678688888"

    Returns: "11-23-545-787-36-45-32-45-32-572-949-27-36-464-38-74-63-767-868-88-88"

  111. "545555545454545455545454555454545454555411111"

    Returns: "545-55-55-454-545-454-55-545-454-55-54-545-454-545-55-41-11-11"

  112. "01110010110110100011010111100110111110101111100101"

    Returns: "01-11-00-10-11-011-010-00-11-010-11-11-00-11-01-11-11-010-11-111-00-101"

  113. "5523455989662329876554321155234559896623298765544"

    Returns: "55-234-55-989-66-232-98-76-55-432-11-55-234-55-989-66-232-98-76-55-44"

  114. "11101110111011100111011101110111011101110111011101"

    Returns: "11-10-11-10-11-101-11-00-11-10-11-10-11-10-11-10-11-10-11-10-11-10-11-101"

  115. "0011000101110001011100111001011001001010010100101"

    Returns: "00-11-00-010-11-10-00-101-11-00-111-00-10-11-00-100-101-00-101-00-101"

  116. "003"

    Returns: "003"

  117. "11122248484999944487538756827757755344433333234248"

    Returns: "11-12-22-48-484-99-99-44-48-75-38-75-682-77-577-55-34-44-33-33-323-42-48"

  118. "222545"

    Returns: "222-545"

  119. "11111111111111111111111111111111111111111111111111"

    Returns: "11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11-11"

  120. "00000000000000000000000000000000000000000000000000"

    Returns: "00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00"

  121. "11001101010100110101100111012341101011000001101010"

    Returns: "11-00-11-010-101-00-11-010-11-00-11-101-234-11-010-11-00-000-11-01-010"

  122. "54545454545454545454545454545454545454546677883399"

    Returns: "54-54-545-454-545-454-545-454-545-454-545-454-545-454-66-77-88-33-99"

  123. "222222222222222222222222222222222222222222222222"

    Returns: "22-22-22-22-22-22-22-22-22-22-22-22-22-22-22-22-22-22-22-22-22-22-22-22"

  124. "12335123351233512335123351233512335123351233512335"

    Returns: "12-33-512-33-512-33-512-33-512-33-512-33-512-33-512-33-512-33-512-335"

  125. "11111111111111111111111111122222222221111111111111"

    Returns: "11-11-11-11-11-11-11-11-11-11-11-11-111-22-22-22-22-22-11-11-11-11-11-111"

  126. "1241247125127741524123511421518881"

    Returns: "12-41-24-71-25-12-77-41-52-41-235-11-42-151-88-81"

  127. "1001011011101010001010111101110000110000010"

    Returns: "10-010-11-01-11-01-01-00-01-010-11-11-01-11-00-00-11-00-00-010"

  128. "91919191919191919191919199191919191919191919191919"

    Returns: "919-191-919-191-919-191-919-191-99-191-919-191-919-191-919-191-919"

  129. "1224"

    Returns: "12-24"

  130. "12121212121212121212121212121212121212121212121212"

    Returns: "12-121-212-121-212-121-212-121-212-121-212-121-212-121-212-121-212"

  131. "98443344575898443344575898443344575898443344575898"

    Returns: "98-44-33-44-575-898-44-33-44-575-898-44-33-44-575-898-44-33-44-575-898"

  132. "10111011010"

    Returns: "10-11-10-11-010"

  133. "545874654687465146879876521320109496879874"

    Returns: "545-87-46-54-68-74-65-14-68-79-87-65-21-32-010-949-68-79-874"

  134. "87888888898888888888585888888884888883888888888888"

    Returns: "87-88-88-88-89-88-88-88-88-88-585-88-88-88-88-48-88-88-388-88-88-88-88-88"

  135. "000011001110110110000001000001"

    Returns: "00-00-11-00-11-10-11-011-00-00-00-10-00-001"

  136. "22222222222222222222222212222222222222222222222222"

    Returns: "22-22-22-22-22-22-22-22-22-22-22-22-12-22-22-22-22-22-22-22-22-22-22-22-22"

  137. "12345678901234567890123456789012345678905432167890"

    Returns: "12-34-56-78-90-12-34-56-78-90-12-34-56-78-90-12-34-56-78-90-54-32-16-78-90"

  138. "67300366432437582881"

    Returns: "673-00-366-43-24-37-582-881"

  139. "7777754545454545412212221212177777"

    Returns: "77-77-75-454-545-454-541-22-12-22-12-121-77-777"

  140. "10111"

    Returns: "101-11"

  141. "1101100001101110101110101001100110010010100118110"

    Returns: "11-011-00-00-11-01-11-010-11-10-101-00-11-00-11-00-100-101-00-11-81-10"

  142. "0101100200011103102101010101010211221121111300200"

    Returns: "010-11-00-20-00-11-10-31-02-10-101-010-101-02-11-22-11-21-11-13-00-200"

  143. "59692573645723686555555237465723657623945762384752"

    Returns: "59-69-25-73-64-57-23-686-55-55-55-23-74-65-72-36-57-62-39-45-76-23-84-752"

  144. "1015"

    Returns: "10-15"

  145. "11221106666666110454545777778888010141123445566010"

    Returns: "11-22-11-06-66-66-66-11-04-54-545-77-777-88-88-010-14-11-23-44-55-66-010"

  146. "345112"

    Returns: "345-112"

  147. "3489875639749872697469750298764726573498746538723"

    Returns: "34-898-75-63-97-49-87-26-97-46-97-50-29-87-64-72-65-73-49-87-46-53-87-23"

  148. "12312312312312312312312312312312312312312312312312"

    Returns: "12-31-23-12-31-23-12-31-23-12-31-23-12-31-23-12-31-23-12-31-23-12-31-23-12"

  149. "12345678991234567899123456789912345678991234567899"

    Returns: "12-34-56-78-99-12-34-56-78-99-12-34-56-78-99-12-34-56-78-99-12-34-56-78-99"

  150. "41670808023164840155626686516036348567415776134120"

    Returns: "41-67-08-080-23-16-484-01-55-62-66-86-51-60-363-48-56-74-15-77-61-34-120"

  151. "111111111"

    Returns: "11-11-11-111"

  152. "23847238942384723894238472389423847238942384723894"

    Returns: "23-84-72-38-94-23-84-72-38-94-23-84-72-38-94-23-84-72-38-94-23-84-72-38-94"

  153. "1116411"

    Returns: "11-164-11"

  154. "4673286112367763636283040303188133232332300490393"

    Returns: "46-73-286-11-236-77-63-636-28-304-030-31-88-133-232-33-23-00-490-393"

  155. "02245678"

    Returns: "022-45-678"


This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2024, TopCoder, Inc. All rights reserved.
This problem was used for: