changeXy challenge

Hi,

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

Psedo code:
1. if array length is zero return 0
2. if array length is 1 and it is x return x
3. if array length is 1 and it is not x return same str
4. else find location of x and replace with y if greater than length
5. return replaced string
I wrote my code as below

public String changeXY(String str) {
  if(str.length()==0){
    return "";
  }
  if(str.length()==1&&"x".equals(str)){
    return "y";
  }
   if(str.length()==1&&!"x".equals(str)){
    return str;
  }
   if(str.length()>1){
    return str.replace('x','y');
  }
  
  
  return null;
}

Open in new window




I am  passing all tests



How to improve/modify my design, code and any other alternate approaches. please advise
LVL 7
gudii9Asked:
Who is Participating?
 
phoffricConnect With a Mentor Commented:
The instructions say you have to do this challenge recursively.
What would happen if you modified your code to just call replace without all those if statements?
0
 
rrzConnect With a Mentor Commented:
0
 
phoffricCommented:
>> No recursion is necessary for this challenge.
 You are already stating what the author has observed.
 But the challenge is to learn how to use recursion.
0
Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

 
rrzCommented:
@phoffric,  gudii9 has already gone through 11 recursion challenges last week.  He will not learn anything by using recursion when it is not useful.  He really needs to learn the API better.
0
 
rrzCommented:
I'm sorry. I was wrong.   Your choice of the replace method is fine.
0
 
gudii9Author Commented:
any improvements or alternate approaches for this challenge?
0
 
rrzCommented:
Phoffric, told you in the first comment above here.  He asked you a question about line 12 of your code.
0
 
phoffricCommented:
Before advising upon improvement, we first need to see your recursive solution to the challenge.
0
 
gudii9Author Commented:
public String changeXY(String str) {
    if (str.length() == 0){ 
      return str;
      
    }
   else if (str.charAt(0) == 'x') {
     return "y" + changeXY(str.substring(1));
     
   }
   else{ 
     return str.charAt(0) + changeXY(str.substring(1));
     
   }
}

Open in new window

above passes all tests. any improvements or alternate approaches?
0
 
gudii9Author Commented:
public String changeXY(String str) {
  String regex="x";
  String substr="y";
      String str2 = str.replaceAll(regex, substr);   
      return str2;
}

Open in new window


above also passed all tests
0
 
rrzCommented:
Good work!
Here is my code.
public String changeXY(String str) {
  int index = str.indexOf("x");
  if(index == -1)return str;
  return changeXY(str.substring(0, index) + "y" + str.substring(index + 1));
}

Open in new window

 
public String changeXY(String str) {
  return str.replaceAll("x", "y");   
}

Open in new window

0
 
gudii9Author Commented:
i like index method approach where u are finding index of x then substring just until  x and concatinating with y(replacement of x) then concatenating later part of string as it is.

also your regex approach of replaceAll is more short
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.