countAbc challenge

Hi,


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


I wrote as below and failing some tests.
Expected      Run            
countAbc("abc") → 1      0      X      
countAbc("abcxxabc") → 2      0      X      
countAbc("abaxxaba") → 2      0      X      
countAbc("ababc") → 2      1      X      
countAbc("abxbc") → 0      0      OK      
countAbc("aaabc") → 1      0      X      
countAbc("hello") → 0      0      OK      
countAbc("") → 0      0      OK      
countAbc("ab") → 0      0      OK      
countAbc("aba") → 1      0      X      
countAbc("aca") → 0      0      OK      
countAbc("aaa") → 0      0      OK      
other tests
X      


public int countAbc(String str) {
  
  
 CharSequence cs1="abc";
 CharSequence cs2="aba";
  if(str.length()==0||str.length()==1||str.length()==2){
    return 0;
  }
  if(!str.contains(cs1)||!str.contains(cs2)){
    return 0;
  }
  else return 1+countAbc(str.substring(3));
}

Open in new window


how to fix? any alternate approaches or improvements? please advise
LVL 7
gudii9Asked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
zzynxConnect With a Mentor Software engineerCommented:
This works:

public int countAbc(String str) {
  String stringABC = "abc";    
  String stringABA = "aba";

  if (str.length()==0||str.length()==1||str.length()==2){
    return 0;
  }

  if(str.startsWith(stringABC)){
    return 1 + countAbc(str.substring(3));
  } else if(str.startsWith(stringABA)){
    return 1 + countAbc(str.substring(2));
  }
  return countAbc(str.substring(1));
}

Open in new window

0
 
gudii9Author Commented:
public int countAbc(String str) {
  
  
 CharSequence cs1="abc";
 
 CharSequence cs2="aba";
  if(str.length()==0||str.length()==1||str.length()==2){
    return 0;
  }


  else if(!str.contains(cs1)||!str.contains(cs2)){
    return 0;
  }
  else return 1+countAbc(str.substring(1));
}

Open in new window


above also failing some tests
0
 
ste5anConnect With a Mentor Senior DeveloperCommented:
(str.length()==0||str.length()==1||str.length()==2)

Open in new window


Really?
0
What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

 
zzynxSoftware engineerCommented:
No.
if (str.length()<3)

Open in new window

:)
0
 
gudii9Author Commented:
  else if(!str.contains(cs1)||!str.contains(cs2)){

Open in new window


contains charsequence approach wont work here?
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#contains(java.lang.CharSequence)
0
 
gudii9Author Commented:
public int countAbc(String str) {
  String stringABC = "abc";    
  String stringABA = "aba";

  if (str.length()<3){
    return 0;
  }

  if(str.startsWith(stringABC)){
    return 1 + countAbc(str.substring(3));
  } else if(str.startsWith(stringABA)){
    return 1 + countAbc(str.substring(2));
  }
  return countAbc(str.substring(1));
}

Open in new window


startsWith how is working here why we are moving to str.substring(2));
instead

str.substring(1));
0
 
gudii9Author Commented:
return 1 + countAbc(str.substring(3));
why one return has 3 in if loop as above and one has 2 as below in else if?

  return 1 + countAbc(str.substring(2));

abc need not be at start right? it could be at middle also?
0
 
zzynxSoftware engineerCommented:
If we find the substring "aba", that last 'a' could be the start of another "aba" or "abc" and the challenge wants us to count that. That's why
0
 
gudii9Author Commented:
got it
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.