"I am so awesome,so awesome, so awesome, so cool , so .."
so awesome = > 0 ! shortest
so "..." awesome => 4
Searching operation in O(1) ? Space Complexity?
2. Implementation
Q1: find the two word, outer inward?
A1: frist last first = word1and last = word2
Q1: does word order matter word1,-word2 or word2- word1 counts?
A1: consider order doesn't matter here
public int shortest(String[] words, String word1, String word2)
{
int min = Integer.MAX_VALUE;
int word1_pos = -min; // since word1_pos - word2_pos if word1_pos has value
int word2_pos = -min;
// validate the input
if ( words == null || word1 == null || word2 == null )
return min;
for (int i = 0; i < words.length; i++)
{
String current_word = words[i];
if (current_word.equals(word1))
{
word1_pos = i;
int distance = word1_pos - word2_pos;
if (min > distance)
min = distance;
}
else if ( current_word.equals(word2))
{
word2_pos = i;
int distance = word2_pos - word1_pos;
if (min > distance)
min = distance;
}
}
return min;
}
To solve this problem in less time (But more space), we can create a hash table with each word and the locations where it occurs.
We then just need to find the minimum (arithmetic) difference in the locations (e.g., abs( word0.loc[1] - word1.loc[5] ))
To find the minimum arithmetic difference, we take each location for word1,e.g., {0,3} and do a modified binary search for it in word2's location list, return the closest number. our search for 3, for example, in {2,7,9} would return 1. The minimum of all these binary searches is the shortest distance.
http://weihungleetcodearray.blogspot.com/2015/08/searchbinary-search-search-insert.html
3 .Similar Ones
No comments:
Post a Comment