5083-Bigram分詞


前言
Weekly Contact 140のBigram分詞:
第1の語firstと第2の語secondとが与えられ、一部のテキストtextに「first second third」として出現する可能性がある場合を考慮して、secondfirstに続いて出現し、thirdsecondに続く。
このような場合には、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
  • firstsecondは小文字で構成されています。
    問題を解く構想
    この問題は以下の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);
        }