Problem Statement
An important problem in DNA analysis is finding tandem repeats. A tandem repeat occurs when a base sequence of nucleotides appears twice in a row. (In this problem, a base sequence is simply a contiguous substring and a nucleotide is simply a letter.) For example, in the DNA sequence "GATCATCA", the base sequence "ATC" appears twice in a row. In contrast, "ATCGATC" is not a tandem repeat of the base sequence "ATC" because of the 'G' in between the two copies.
Real DNA often contains errors in which one nucleotide is substituted for another. A k-approximate tandem repeat occurs when a base sequence of nucleotides appears twice in a row, allowing the second copy of the base sequence to differ from the first copy in at most k nucleotides. For example, in the DNA sequence "GATCATGA", the base sequence "ATC" is immediately repeated with a single error as "ATG". Thus, "ATCATG" is a 1-approximate tandem repeat. Note that both copies of the base sequence must be the same length.
Given a DNA sequence dna (represented as a
Definition
- Class:
- TandemRepeats
- Method:
- maxLength
- Parameters:
- String, int
- Returns:
- int
- Method signature:
- int maxLength(String dna, int k)
- (be sure your method is public)
Constraints
- dna contains between 2 and 50 characters, inclusive.
- Every character in dna is a 'G', 'A', 'T', or 'C'.
- k is between 0 and 5, inclusive.
Examples
"GATCATCA"
0
Returns: 3
A tandem repeat with a base sequence of length 3 is "ATCATC", with base sequence "ATC".
"GATCATGA"
1
Returns: 3
A 1-approximate tandem repeat is "ATCATG". The base sequence "ATC" is repeated with a single error.
"GATCATGA"
0
Returns: 0
This example has no tandem repeats.
"AGAGAAAGAA"
3
Returns: 5
"ATTAGCATTGCACACCTTGAGGACTTAGACAAACCTAGTACACAGGTGTA"
5
Returns: 11
"AATAGGACCCATTTTAGGGGGACCCCCC"
5
Returns: 6
"TT"
0
Returns: 1
"TG"
0
Returns: 0
"GC"
1
Returns: 1
"GC"
5
Returns: 1
"CTGCTTCCAACTTCTAAAGCCCAATGCGCTTTTATTCACCCCCAAGAACT"
5
Returns: 8
"GCTGGCAGCAAACGAGGGTTGGAATCAGATCGGCGACTTTCGTGACAACG"
2
Returns: 5
"CAGCTCCTTGTAGCGTGCGGCTTTCCCGTCGACAGACAGCCATGACGATT"
4
Returns: 7
"CCTCGTGATCGCATTTCGGTCCGTTGCATAGGCGCGGCTGGTTAGTAGGG"
0
Returns: 3
"CATGTGCATGGATTAGTGGCTGGTGAGAAAAGACCGCGAGCACATCCAGT"
5
Returns: 11
"ATCCACAAAACTCTCTGCTTCTCAGACCCCTGCCTTGTGGTTAGATGTTC"
4
Returns: 8
"TCCCATATAATAATGGCCGGGCCTCGTCCCTAATCGAACGAGACAGTCAG"
0
Returns: 3
"AGATGCGTAGTAACGTGCGTACTACCTGACTACACGCCCTGATGCGTTTA"
1
Returns: 4
"TGCCTGATTGCCACCACATGGCTAGCACTTCGGTCACGGGGCTACCTCAG"
0
Returns: 3
"TGCGGACAACATACTCTGCAGCGTGTATCATTGAAGGACTAGACTCCGAC"
3
Returns: 7
"GTTAGCGTGTCATGGGCATCCCTTAGTTAGCGTGTCATGGGCATCCCTTA"
0
Returns: 25
"GTTAGCGTGTCATGGGCATCCCTTAGTTTGCGTGTCATGGGCATCCCTTA"
2
Returns: 25
"ATCAT"
1
Returns: 1
"ATCGGTACCGTCGAGCGTCTTCATAGTTAGCGTGGT"
0
Returns: 1
"GCCCTACCTCTCCGAAGGGCCAACTTCTCAGTCGTTG"
2
Returns: 6
"TATCCATCGAATAATCGCGGACTAACTTCGACAACGAC"
5
Returns: 11
"GACATTTCACACGGATTCGTCCAGCTCCCACCCCTGCAA"
1
Returns: 4
"TGCAATACCGCTAACCATCGTTAGATGACTAACAGGACTA"
4
Returns: 10
"CGAGAAAATGAGATTCGTTTACTGCTCAGGAACTCGTTTTA"
1
Returns: 3
"CGGAGTTGATAAGTGTTGGGTAGGCGCCGGGCTCGTCAGTGG"
0
Returns: 2
"TGGGCCGAGTTGCATTTGTGAAAAGTGGGAACTGAGCCGACTT"
5
Returns: 9
"GTCCACACTTGAAACTAGGGACCCATGCTGGGGCTGGTAGGAAG"
0
Returns: 2
"ATGACGTGCTGTTTTTACTGAATCGCAAGTAGCCTCGGCGTCCAC"
1
Returns: 3
"CTGACAGTTCACGGCCGATTAGTATTGGCGCACGATATCGCATCCC"
5
Returns: 10
"GGATGACATGGAAGAGGGATTTTCTACGTTCTACCAACTTTTATATT"
3
Returns: 7
"CGGCGAGTACAACTTAAATGGCTCTACGTTCCATTAGTCGCGCCAGAT"
0
Returns: 2
"GGTGCTAGGTCCCATATGAGAGGGCGAACAGGTCTGTACTGATGCCTAG"
1
Returns: 3
"TGCTGTGTACTGACGTTGGAGAACACCCGACGAAATCCAGCGCTGGGCCT"
2
Returns: 5
"ATTAGCATTGCACACCTTGAGGACTTAGACAAACCTAGTACACAGGTGTA"
5
Returns: 11
"AA"
0
Returns: 1
"AAAAAA"
1
Returns: 3
"CC"
1
Returns: 1
"GATCAGATCGACAGGGGACGATACAGATTAGACGAGATTAAACCGGATTA"
4
Returns: 10
"AA"
5
Returns: 1
"GCA"
5
Returns: 1
"AG"
1
Returns: 1
"AGAGAAAGAA"
3
Returns: 5
"AT"
1
Returns: 1
"AA"
1
Returns: 1
"AAA"
5
Returns: 1
"GATCATCA"
0
Returns: 3
"GG"
1
Returns: 1
"AGTCTAGCC"
0
Returns: 1
"AA"
2
Returns: 1
"AGTCCTGGTCTACTA"
0
Returns: 3
"GATC"
4
Returns: 2
"GATCC"
0
Returns: 1
"GATC"
1
Returns: 1
"GG"
0
Returns: 1