Solved

# countPairs challenge

Posted on 2016-09-21
57 Views
Hi,

I am working on below challenge.
http://codingbat.com/prob/p154048

Recursion-1 > countPairs
prev  |  next  |  chance
We'll say that a "pair" in a string is two instances of a char separated by a char. So "AxA" the A's make a pair. Pair's can overlap, so "AxAxA" contains 3 pairs -- 2 for A and 1 for x. Recursively compute the number of pairs in the given string.

countPairs("axa") → 1
countPairs("axax") → 2
countPairs("axbx") → 1
0
Question by:gudii9
• 4
• 3

LVL 27

Expert Comment

This challenge is very similar to
https://www.experts-exchange.com/questions/28971426/pairstar-challenge.html
You could use the same approach here.  The code here will very similar.
In this challenge, you will return a int that will the number of pairs. The pairs in this challenge are separated by another character. So, the conditional is a little different.
0

LVL 7

Author Comment

i got meaning now. let me think

so basically same character must be separated by one other character and we need to count such group of 3 counts...

We'll say that a "pair" in a string is two instances of a char separated by a char. So "AxA" the A's make a pair. Pair's can overlap, so "AxAxA" contains 3 pairs -- 2 for A and 1 for x. Recursively compute the number of pairs in the given string.

countPairs("axa") → 1
countPairs("axax") → 2
countPairs("axbx") → 1
0

LVL 7

Author Comment

``````public int countPairs(String str) {
int count=0;

if(str.length() < 2){
return 0;
}
if(str.charAt(0) == str.charAt(2)){
return 1+ countPairs(str.substring(1));
}
else{
return  countPairs(str.substring(1));
}

}
``````

above fails below tests.

Expected      Run
countPairs("axa") → 1      Exception:java.lang.StringIndexOutOfBoundsException: String index out of range: 2 (line number:8)      X
countPairs("axax") → 2      Exception:java.lang.StringIndexOutOfBoundsException: String index out of range: 2 (line number:8)      X
countPairs("axbx") → 1      Exception:java.lang.StringIndexOutOfBoundsException: String index out of range: 2 (line number:8)      X
countPairs("hi") → 0      Exception:java.lang.StringIndexOutOfBoundsException: String index out of range: 2 (line number:8)      X
countPairs("hihih") → 3      Exception:java.lang.StringIndexOutOfBoundsException: String index out of range: 2 (line number:8)      X
countPairs("ihihhh") → 3      Exception:java.lang.StringIndexOutOfBoundsException: String index out of range: 2 (line number:8)      X
countPairs("ihjxhh") → 0      Exception:java.lang.StringIndexOutOfBoundsException: String index out of range: 2 (line number:8)      X
countPairs("") → 0      0      OK
countPairs("a") → 0      0      OK
countPairs("aa") → 0      Exception:java.lang.StringIndexOutOfBoundsException: String index out of range: 2 (line number:8)      X
countPairs("aaa") → 1      Exception:java.lang.StringIndexOutOfBoundsException: String index out of range: 2 (line number:8)      X
other tests
X
Your progress graph for this problem

0

LVL 7

Author Comment

``````public int countPairs(String str) {
int count=0;

if(str.length() < 3){
return 0;
}
if(str.charAt(0) == str.charAt(2)){
return 1+ countPairs(str.substring(1));
}
else{
return  countPairs(str.substring(1));
}

}
``````

above passes all tests.
any improvements or alternate approaches?
0

LVL 27

Expert Comment

My code is exactly the same as your code except for the optional else word. The else is optional because the return statements control the flow.
0

LVL 7

Author Comment

if  with if with else
and
if with else if with else

what is difference in this case?
both passes all tests?
0

LVL 27

Accepted Solution

rrz earned 500 total points
There is no difference in this case.
The pseudo code in my mind is

if(condition)return something
if(another condition)return some other thing
return something different

My code;
``````public int countPairs(String str) {
if(str.length() < 3)return 0;
if(str.charAt(0) == str.charAt(2))return 1 + countPairs(str.substring(1));
return countPairs(str.substring(1));
}
``````
I don't think the else statement adds anything to the logic. That is why I left them out.
0

## Featured Post

### Suggested Solutions

This article will show, step by step, how to integrate R code into a R Sweave document
Displaying an arrayList in a listView using the default adapter is rarely the best solution. To get full control of your display data, and to be able to refresh it after editing, requires the use of a custom adapter.
Viewers will learn about if statements in Java and their use The if statement: The condition required to create an if statement: Variations of if statements: An example using if statements:
This tutorial explains how to use the VisualVM tool for the Java platform application. This video goes into detail on the Threads, Sampler, and Profiler tabs.