INSTEAD OF USING A SUBTRING TO MATCH USE INDEX
str[0] as a basis and use append to avoid confusion over using subtring index
s= { "MAU", "MAKAN", "MALAM"}
there are two common prefixes of MAU, which are: "M" and "MA"
Among these, the Longest Common Prefix is "MA" which has a length of 2
2. Implementation
Q1: start from the first word, substring(0,i)i=1~ len
A1; compare it with the rest of string same length,
E.g., M len =1, check i=1 with M and M
MA len =2, check i =2 with MA and MA
MAU len =3, check i=3 wiht MAK and MAL => false
O(string len*array length)
Runtime Error Message:Line 62: java.lang.StringIndexOutOfBoundsException: String index out of range: 1
Last executed input:["cba",""]
Input:["c","c"]
Output:""
Expected:"c"
// Time:O(m*n), Space:O(m), where m is string length and n is numbers of string
public String longestCommonPrefix(String[] strs)
{
StringBuilder res= new StringBuilder();
// validate the input
if ( strs== null || strs.length == 0)
//return "";
// NOTE: when loop stop, stringbuilder is what you want
return res.toString();
//boolean flag = true;
//String prefix = new String();
//for ( int i = 1 ; i <= strs[0].length;i++)
//{
//
// prefix = strs[0].substring(0,i);
// for ( int j =1; j< strs.length; j++)
// {
// if ( prefix != strs[j].substring(0,i) )
// {
// flag = false;
// break ;
// }
// }
// if (flag == false)
// return strs[0].substring(0,i-1);
//}
//if (flag == true)
// return strs[0].substring(0,str[0].length);
boolean sameFlag = true;
int index = 0;
while ( sameFlag )
{
for (int i = 0; i < strs.length ;i++)
{
if (str[i].length <= index || strs[i].charAt(index) != str[0])
{
sameFlag = false;
break;
}
}
if (sameFlag)
{
res.append(strs[0].charAt(index));
index++;
}
}
return res.toString();
}
3.Similar onesLongest Series
(H) Longest Valid Parentheses
(M) Longest Palindromic Substring
(M) Longest Substring Without Repeating Characters
(H) Longest Consecutive Sequence
No comments:
Post a Comment