Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 112
  • Last Modified:

min concatination challenge

Hi,

I am trying below challenge

http://codingbat.com/prob/p105745



My code is like below.
public String minCat(String a, String b) {
int aLen=a.length();
int bLen=b.length();
if(aLen==bLen){
return a+b;
}

if(aLen>bLen){
return a+b;
}


if(aLen<bLen){
return a+b;
}
  return null;
}

Open in new window


i am failing all test cases. Please advise on how to modify and improve my code.

Thanks in advance.
0
gudii9
Asked:
gudii9
  • 5
  • 3
  • 2
  • +1
3 Solutions
 
QlemoC++ DeveloperCommented:
You are always just concatenating the two strings, so of course that fails.
You need to take the smaller size, and use only the last n characters of the longer string.

If I would write the code, I would not care about checking which string is longer. I would do something like (in pseudo code):
   minsize = minimum of aLen and bLen
   return minsize chars from end of a and minsize chars from end of b

That works for all cases.
0
 
gudii9Author Commented:
String minCat(String a, String b) {
		int aLen=a.length();
		int bLen=b.length();
		int minSize=0;
		String s="";
		if(aLen==bLen){
			s=a+b;
		return s;
		}
		//s1.compareTo(s)

		/*You are always just concatenating the two strings, so of course that fails.
		You need to take the smaller size, and use only the last n characters of the longer string.

		If I would write the code, I would not care about checking which string is longer. I would do something like (in pseudo code):
		   minsize = minimum of aLen and bLen
		   return minsize chars from end of a and minsize chars from end of b

		That works for all cases.*/

		if(aLen>bLen){
		//return minSize=bLen.length();
			s= a.substring(aLen-bLen)+b.substring(bLen-bLen);
			return s;
		}


		if(aLen<bLen){
		s= a.substring(aLen-aLen)+b.substring(bLen-aLen);
		}
		  return s;
		}

Open in new window


Like above?

public class Test41 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
	String s=	minCat("at","hi");
	System.out.println("s is-->"+s);

	}

	public static String minCat(String a, String b) {
		int aLen=a.length();
		int bLen=b.length();
		int minSize=0;
		String s="";
		if(aLen==bLen){
			s=a+b;
		return s;
		}
		//s1.compareTo(s)

		/*You are always just concatenating the two strings, so of course that fails.
		You need to take the smaller size, and use only the last n characters of the longer string.

		If I would write the code, I would not care about checking which string is longer. I would do something like (in pseudo code):
		   minsize = minimum of aLen and bLen
		   return minsize chars from end of a and minsize chars from end of b

		That works for all cases.*/

		if(aLen>bLen){
		//return minSize=bLen.length();
			s= a.substring(aLen-bLen)+b.substring(bLen-bLen);
			return s;
		}


		if(aLen<bLen){
		s= a.substring(aLen-aLen)+b.substring(bLen-aLen);
		}
		  return s;
		}
}

Open in new window


Now i was able to pass all the tests. How can i improve my code.
Please advise
0
 
QlemoC++ DeveloperCommented:
int minLen = Math.min(aLen, bLen);
return a.substring(Math.max(0, aLen-minLen)) + b.substring(Math.max(0, bLen-minLen)); 

Open in new window

is what I was talking about
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
ozoCommented:
Is the Math.max necessary?
0
 
QlemoC++ DeveloperCommented:
Dunno for Java, but in most languages negative string positions result in errors.
0
 
ozoCommented:
Is it possible for aLen-minLen or bLen-minLen to be negative?
0
 
QlemoC++ DeveloperCommented:
No :-\ Got you, we can and should omit the max.
int minLen = Math.min(aLen, bLen);
return a.substring(aLen-minLen) + b.substring(bLen-minLen);

Open in new window

0
 
zzynxSoftware engineerCommented:
So gudii9, in case you can't follow, in short all the above comments result in this simple method:

public String minCat(String a, String b) {
  int aLen = a.length(), bLen = b.length();
  int minLen = Math.min(aLen, bLen);
  return a.substring(aLen-minLen) + b.substring(bLen-minLen);
}

Open in new window

0
 
gudii9Author Commented:
i see instead of two if loops like i wrote now we can do in one return statement with substring as we already got minLen from Math.min function right?
please advise
0
 
QlemoC++ DeveloperCommented:
You didn't have any loop. You used three IFs to catch all cases. That or the mathematical approach like shown by me are the common solutions.
0
 
zzynxSoftware engineerCommented:
right?
Right! Instead of your two IFs.
0
 
zzynxSoftware engineerCommented:
Thanx 4 axxepting
0

Featured Post

Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

  • 5
  • 3
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now