[Webinar] Streamline your web hosting managementRegister Today

x
• Status: Solved
• Priority: Medium
• Security: Public
• Views: 107

# startMatch challenge

Hi,

I am trying below challenge
http://codingbat.com/prob/p141494
0
gudii9
• 6
• 3
• 3
• +1
3 Solutions

Commented:
Given a string and a second "word" string, we'll say that the word matches the string if it appears at the front of the string, except its first char does not need to match exactly. On a match, return the front of the string, or otherwise return the empty string. So, so with the string "hippo" the word "hi" returns "hi" and "xip" returns "hip". The word will be at least length 1.

startWord("hippo", "hi") → "hi"
startWord("hippo", "xip") → "hip"
startWord("hippo", "i") → "h"
"hi" matches the front of "hippo" exactly.
"xip" matches the front of "hippo", except that the first character does not match exactly
"i" matches the front of "hippo", except that the first character does not match exactly
0

Commented:
If a match of the "word" occurs at the beginning of the string "str" without respect to the first character in the string, return the substring of str for the length of the word. That infers that if the length of the word is one, the first character of the str will always be returned. What the challenge doesn't seem to address is what to return if there is no match at all. I suspect the answer to that would be to return an empty string. If that is the case, the following should work:

``````public static String startWord(String str, String word) {
int len = word.length();
if (len == 1) {
return str.substring(0, 1);
}
String wordPart = word.substring(1);
if (str.startsWith(wordPart, 1)) {
return str.substring(0, len);
}
return "";
}
``````
0

Commented:
Commenting out lines 3,4,5 of http:#a40553778 improves the result when str.length()==0
0

Software engineerCommented:
Remember to first handle the "corner cases"?

Here we go.
1) if the string is empty, then just return the empty string

``````  if (str.isEmpty()) {
return "";
}
``````
2) if the word completely fits the 'str' parameter, then return the word [startWord("hippo", "hi") -> "hi"]

``````  if (str.startsWith(word)) {
return word;
}
``````
3) if the word (not taking into account the first character of word) fits the 'str' parameter, then return the part of 'str' that matches [startWord("hippo", "xip") -> "hip"]

``````  if (str.substring(1).startsWith(word.substring(1))){
return str.substring(0, word.length());
}
``````
4) if the word fits the 'str' parameter (not taking into account the first character of str), then return the part of 'str' that matches [startWord("hippo", "i") -> "h"]

``````  if (str.substring(1).startsWith(word)){
return str.substring(0, word.length());
}
``````

5) if none of the above, then return the empty string

``````  return "";
``````

Bringing all this cases together we have as a result:

``````public String startWord(String str, String word) {
if (str.isEmpty()) return "";
if (str.startsWith(word)) {
return word;
}
if (str.substring(1).startsWith(word.substring(1))){
return str.substring(0, word.length());
}
if (str.substring(1).startsWith(word)){
return str.substring(0, word.length());
}
return "";
}
``````

Or when combining 3) and 4) together:

``````public String startWord(String str, String word) {
if (str.isEmpty()) return "";
if (str.startsWith(word)) {
return word;
}
if ( str.substring(1).startsWith(word.substring(1)) || str.substring(1).startsWith(word) ){
return str.substring(0, word.length());
}
return "";
}
``````
0

Commented:
The code in http:#a40559302 also includes parts that are better commented out.
0

Author Commented:
On a match, return the front of the string,

how many characters of the front of the string. Is i as many characters of the second "word" string. please advise
0

Commented:
If the word is made up of 2 characters and you have a match return the first 2 characters of the string, if word is 3 characters long return the first 3 characters of the string if you have a match, etc.
0

Software engineerCommented:
My code passes all tests
0

Commented:
The code in http:#a40559302 does pass all http://codingbat.com/prob/p141494 tests.
If part of the code was omitted, it would still pass all tests, and would also not fail to follow the English specification for some cases that  http://codingbat.com/prob/p141494 does not test.

Return the same front of the string that matched the second "word" string, which would contain the same number of characters.
0

Author Commented:
"hi" matches the front of "hippo" exactly.

one general interest question how do you underline under "hi" as you did in comment

http:#a40552570
http://www.experts-exchange.com/Programming/Languages/Java/Q_28597724.html#a40552570

I tried to underline in word document and copy pasted and posted and underline is lost. please advise
0

Commented:
It wraps a
``````[u][/u]
``````
around the selected text.
0

Software engineerCommented:
In the text box you are typing your comment, you
1) select the text you want to underline
2) you press the button with the underlined U as icon (cf. screenshot)

The same way you can set text in bold or italic (using the buttons on the left of the U button)
You can probably guess what the other buttons do.
0

Author Commented:
got it.
0

Commented:
public String startWord(String str, String word) {
if (str.isEmpty()) return "";
if (str.startsWith(word)) {
return word;
}
if ( str.substring(1).startsWith(word.substring(1)) /* || str.substring(1).startsWith(word) */ ){
return str.substring(0, word.length());
}
return "";
}
passes all tests (but the  || str.substring(1).startsWith(word)  would cause startWord("hippo", "ipp") to incorrectly return "hip")
public String startWord(String str, String word) {
if ( str.length() >= word.length() && str.substring(1).startsWith(word.substring(1)) ){
return str.substring(0, word.length());
}
return "";
}
passes all tests even more simply
0

## Featured Post

• 6
• 3
• 3
• +1
Tackle projects and never again get stuck behind a technical roadblock.