SORTED array of strings => Binary Search
find "ball" in ["at","","","","ball","","","car","","","dad","",""] will return 4
find "ballcar" in ["at","","","","","ball","car","","","dad","",""] will return -1
2. Implementation
Use ordinary binary search
1. hit an empty string, advance to the next non-empty string
2. If there is no next non-empty string, search the left half
{
for ( int i=0; i < strings.length; i++ )
{
if (strings[i] == "") return i;
}
return -1;
}
public int search(String[] strings, String str) { // validate the input if ( strings == null || str == null ) return -1; if (str=="") { for ( int i=0; i < strings.length; i++ ) { if (strings[i] == "") return i; } return -1; } return search(strings, str, 0, strings.length - 1); } public int search(String[] strings, String target, int l, int r) { while( l <= r ) { // Ensure there is something at the end while ( l <= r && strings[r] == "" ) --r; // The block was empty, so fail if ( r < l) return -1; int m = (l+r)/2; while (strings[m] == "") ++m; // NOTE: binary Search int r = strings[m].compareTo(target); if ( r == 0 ) return m; if ( r < 0)// at < ball(target) l = m+1; else // ball(target) < car r = m-1; } return -1; }3.Similar Ones
No comments:
Post a Comment