Problem Statement
Given are two
The string S(n) is formed by concatenating 1,000,000 copies of P1 followed by n copies of P2.
The infinite string S is formed by concatenating the strings S(1), S(2), S(3), ... in this order.
The string T consists of the first 10^16 characters of the string S.
We are interested in substrings of T that are zeroCount characters long and contain only zeros. Write a method that finds the first occurrence of such a substring in T, and returns the zero-based index of its first character. In case T contains no such substring return -1.
Definition
- Class:
- RepeatedPatterns
- Method:
- findZeroSegment
- Parameters:
- String, String, String
- Returns:
- long
- Method signature:
- long findZeroSegment(String P1, String P2, String zeroCount)
- (be sure your method is public)
Notes
- The number zeroCount may be large, and therefore it is specified as a String.
Constraints
- P1 will contain between 1 and 50 characters, inclusive.
- P2 will contain between 1 and 50 characters, inclusive.
- P1 and P2 will contain only zeroes ('0') and ones ('1').
- zeroCount will contain between 1 and 17 characters, inclusive.
- zeroCount will contain only digits ('0'-'9').
- zeroCount will represent a positive integer between 1 and 10^16, inclusive.
- zeroCount will not contain leading zeros.
Examples
"111010100001010"
"010000001000"
"3"
Returns: 7
The first occurrence of three consecutive zeroes is right in the first copy of P1.
"1101010010"
"0001000"
"3"
Returns: 9999999
This time the first substring "000" starts with the last character of the 1,000,000th copy of P1.
"1101010010"
"0001000"
"5"
Returns: 20000011
We have the same string T as in Example 1, only we look for the substring "00000". The first occurrence is between the second and the third copy of P2.
"10101010"
"101010101010"
"9876543219876"
Returns: -1
Nowhere in the infinite string S can we find two consecutive zeroes. Clearly, in the string T there is no substring with 9876543219876 consecutive zeroes.
"11111111111111111111111111"
"0"
"9876543219876"
Returns: -1
The infinite string S does contain 9876543219876 consecutive zeroes. However, the first occurrence is too far, thus the string T doesn't contain it.
"1111111111111"
"1111111"
"1"
Returns: -1
"1"
"1"
"1"
Returns: -1
"11111111111111111111111111111111111111111111111111"
"11111111111111111111111111111111111111111111111111"
"1"
Returns: -1
"11111111111111111111111111111111111111111111111111"
"11111111111111111111111111111111111111111111111111"
"10000000000000000"
Returns: -1
"0"
"0"
"1"
Returns: 0
"0"
"0"
"47"
Returns: 0
"0"
"0"
"10000000000000000"
Returns: 0
"0"
"1"
"1"
Returns: 0
"0"
"1"
"2"
Returns: 0
"1"
"0"
"1"
Returns: 1000000
"1"
"0"
"2"
Returns: 2000001
"1"
"0"
"87654321"
Returns: 3929294272158360
"00001010101011101101010100000"
"000000000010100000100000010000000"
"4"
Returns: 0
"00001010101011101101010100000"
"000000000010100000100000010000000"
"5"
Returns: 24
"0000101000000001111100000"
"1010010010101010"
"8"
Returns: 7
"0000101000000001111100000"
"0000101000000001111100000"
"9"
Returns: 20
"10000000000000000000000000000000000000000000000000"
"00000000000000000000000000000000000000000000000001"
"98"
Returns: 49999951
"10000000000000000000000000000000000000000000000000"
"00000000000000000000000000000000000000000000000001"
"99"
Returns: -1
"00000000000000000000000000000000000000000000000001"
"10000000000000000000000000000000000000000000000000"
"98"
Returns: 50000001
"00000000000000000000000000000000000000000000000001"
"10000000000000000000000000000000000000000000000000"
"99"
Returns: -1
"0010100101010101010101001111101011110"
"000000001111111111111101010111110000000"
"11"
Returns: 74000071
"00000"
"10"
"5000000"
Returns: 0
"00000"
"10"
"5000001"
Returns: 5000001
"00000000000000000000000000000000000000000000000000"
"10000000000000000000000000000000000000000000000000"
"49876543"
Returns: 0
"00000000000000000000000000000000000000000000000000"
"10000000000000000000000000000000000000000000000000"
"50000049"
Returns: 50000001
"00000000000000000000000000000000000000000000000000"
"10000000000000000000000000000000000000000000000000"
"50000050"
Returns: -1
"0000000000000000000000"
"0000000000000000000000000000"
"4632761373274275"
Returns: 0
"1"
"0"
"140424892"
Returns: -1
"1"
"0"
"140424891"
Returns: 9999999826968495
"000000000000000000000000000001"
"00"
"172237485"
Returns: 9999997066219256
"000000000000000000000000000001"
"00"
"172237511"
Returns: 9999999695306340
"000000000000000000000000000001"
"00"
"172237512"
Returns: -1
"001010111000"
"0"
"49283"
Returns: 592550136000
"01000"
"000"
"51"
Returns: 80000357
"1"
"0"
"2"
Returns: 2000001
"1"
"00"
"3"
Returns: 2000002
"0111111110"
"000"
"235153000"
Returns: 9999998702205833
"0"
"00000100000"
"1000008"
Returns: 1000006
"00110100110110001000"
"00"
"180989878"
Returns: 9999232272139029
"01100"
"00"
"195062491"
Returns: 9999999678656290
"00000000000000000000000000000000000000000000000000"
"00010000000000000000000000000000000000000000000100"
"50000005"
Returns: 50000048
"1"
"0"
"140424892"
Returns: -1
"00000"
"010"
"5000002"
Returns: 5000002
"0"
"01"
"1000001"
Returns: 0
"1"
"00"
"1000"
Returns: 500249500
"0"
"010"
"1000002"
Returns: 1000002
"111"
"0"
"1000"
Returns: 3000499500
"0"
"1"
"100"
Returns: 0
"0"
"00"
"3"
Returns: 0
"0"
"1"
"1000000000000"
Returns: -1
"000"
"000"
"1000000000"
Returns: 0
"101010"
"0"
"1000"
Returns: 5994498500
"001010"
"00"
"123456789"
Returns: 4180764798634055
"000000"
"000000"
"3"
Returns: 0
"00001111100000000000000000"
"00000"
"10000000"
Returns: 61999851000033
"000100"
"000"
"100"
Returns: 192001486
"00000000000000000000000000000000000000000000000000"
"00000000000000000000000000000000000000000000000000"
"10000000000000000"
Returns: 0
"11111111111111111111111111"
"0"
"9876543219876"
Returns: -1
"01000"
"00"
"192500123"
Returns: 9745324253753537
"00001000001"
"1111"
"3"
Returns: 0
"101"
"00"
"150"
Returns: 225005550
"1"
"101"
"1"
Returns: 1000001
"0000"
"0001"
"4000001"
Returns: 0
"00011"
"1100"
"5"
Returns: 5000002
"000"
"1"
"2"
Returns: 0
"010"
"0"
"1000"
Returns: 2994497502
"0"
"00100"
"1000004"
Returns: 1000003
"0001"
"10"
"4"
Returns: 4000001
"1111111111111111111100000"
"0"
"9876543213"
Returns: -1
"10101010"
"101010101010"
"9876578"
Returns: -1
"10001"
"10001"
"999000"
Returns: -1
"00100"
"0"
"4"
Returns: 3
"1"
"0"
"140424891"
Returns: 9999999826968495
"111010100001010"
"0"
"111111111"
Returns: 7839505977160494
"0010"
"0000"
"24000000"
Returns: 95999987999999
"0010"
"0000"
"21000000"
Returns: 76124989499999
"010110"
"1111100"
"3"
Returns: 6000005
"0011"
"1100"
"4"
Returns: 4000002
"0"
"010"
"1000001"
Returns: 0
"000000000"
"000000000"
"111111111"
Returns: 0
"0"
"00"
"1000002"
Returns: 0
"1"
"00000000"
"125"
Returns: 16000960
"10"
"00"
"4"
Returns: 4000001
"0000000000"
"000000000"
"100000000000"
Returns: 0
"00000000000000000000000000000000000000000000000000"
"0"
"999999999999"
Returns: 0
"0001000"
"0000000000"
"1011"
Returns: 707050497
"1001010010101010100010001010101"
"1010100101010100100000010101"
"6"
Returns: 31000017
"000"
"000"
"20"
Returns: 0
"00100"
"0000"
"4004"
Returns: 5001997998
"0110"
"0000000000"
"1000002"
Returns: 449999499999
"00100"
"0000"
"435432"
Returns: 567984475182
"111010100001010"
"010000001000"
"1000000000000000"
Returns: -1
"0"
"1"
"10000000"
Returns: -1
"0000010101000000"
"00000000"
"100000"
Returns: 200608850002
"00100"
"00"
"6"
Returns: 4999998
"010100"
"0"
"10"
Returns: 42000019
"10000000000000000000000000000000000000000000000000"
"00000000000000000000000000000000000000000000000001"
"60"
Returns: 49999951
"00001000"
"0000"
"111554487"
Returns: 1778659155231557
"101"
"0"
"1000"
Returns: 3000499500
"000"
"1110001110"
"3000001"
Returns: 3000009
"1"
"0"
"1000000000000000"
Returns: -1
"0010"
"000"
"11"
Returns: 12000008
"1111110000"
"0"
"20"
Returns: 160000116
"10"
"01"
"2"
Returns: 1999999
"001010"
"010101"
"3"
Returns: 5
"111"
"00000"
"117"
Returns: 72001380
"01"
"1000"
"4"
Returns: 2000001
"1"
"1001"
"2"
Returns: 1000001
"1111111111111111111111111111111011010101010101000"
"0"
"7"
Returns: 196000003
"1"
"0000000000"
"25000"
Returns: 2531237500
"11001"
"00"
"10"
Returns: 25000020
"011"
"110"
"2"
Returns: 3000002
"0"
"10000000000"
"1000001"
Returns: 1000001
"110"
"000"
"1234567"
Returns: 1488590917442
"1101010010"
"0001000"
"3"
Returns: 9999999
"010"
"0"
"3"
Returns: 2999999
"0"
"0100"
"1000003"
Returns: 1000002
"1"
"0"
"10000000000000000"
Returns: -1
"1"
"1"
"1919"
Returns: -1
"1"
"0100010"
"3"
Returns: 1000002
"100001110000000110000000000"
"000000000000000"
"6546212"
Returns: 13211603572355
"0"
"10"
"1000001"
Returns: 1000001
"0111111110"
"000"
"100000"
Returns: 334996583333
"1"
"0"
"9"
Returns: 9000036
"0"
"001"
"1000002"
Returns: 0
"0000000000"
"0000100000"
"10000009"
Returns: 10000005
"00"
"0000000000"
"5"
Returns: 0
"00100"
"0000"
"4"
Returns: 3
"1001010010100100101001"
"0001000111010010100000000"
"12462189"
Returns: -1
"0"
"0"
"1000000000000"
Returns: 0