5083-Bigram分詞
前言
Weekly Contact 140のBigram分詞:
第1の語
このような場合には、3番目の単語「
例1:
問題を解く構想
この問題は以下の2点に注意しなければなりません。 である。
コードを実現
Weekly Contact 140のBigram分詞:
第1の語
first
と第2の語second
とが与えられ、一部のテキストtext
に「first second third
」として出現する可能性がある場合を考慮して、second
はfirst
に続いて出現し、third
はsecond
に続く。このような場合には、3番目の単語「
third
」を答えに追加し、答えを返します。例1:
:text = "alice is a good girl she is a good student", first = "a", second = "good"
:["girl","student"]
例2: :text = "we will we will rock you", first = "we", second = "will"
:["we","rock"]
ヒント:1 <= text.length <= 1000
text
はスペースで区切られた単語からなります。各単語は小文字の英字で構成されています。1 <= first.length, second.length <= 10
first
とsecond
は小文字で構成されています。問題を解く構想
この問題は以下の2点に注意しなければなりません。
first second third
の3つの単語は連続して出現するもので、例えば :text = "alice is a good girl she is a really good student", first = "a", second = "good"
:["girl"]
first second third
の3つの単語のうち、third
は次のサイクルのfirst
であり、例えば、例2 コードを実現
/**
* 5083. Bigram
* @param text
* @param first
* @param second
* @return
*/
public String[] findOcurrences(String text, String first, String second) {
//
String[] words = text.split(" ");
List list = new ArrayList<>();
//
int firstIndex = -1;
//
int secondIndex = -1;
for (int i = 0; i < words.length; i++) {
String word = words[i];
if (firstIndex >= 0 && secondIndex > 0) { //
firstIndex = -1; //
secondIndex = -1; //
list.add(word);
}
// ,
// 1.
// 2.
// 3. (secondIndex = firstIndex+1)
//
if (word.equals(second) && firstIndex >= 0 && firstIndex == i - 1) {
secondIndex = i;
continue; //
} else {
// , ,
if (firstIndex >= 0) {
firstIndex = -1;
}
}
//
// 1.
// 2.
if (firstIndex < 0 && word.equals(first)) {
firstIndex = i;
continue; //
}
}
String[] result = new String[list.size()];
return list.toArray(result);
}