2. 給定一個 query 和一個 text,均由小寫字母組成。要求在 text 中找出以同樣的順序連 續出現在 query 中的最長連續字母序列的長度。例如, query 為“acbac”,text
阿新 • • 發佈:2018-12-18
2. 給定一個 query 和一個 text,均由小寫字母組成。要求在 text 中找出以同樣的順序連 續出現在 query 中的最長連續字母序列的長度。例如, query 為“acbac”,text 為 “acaccbabb”,那麼 text 中的“cba”為最長的連續出現在 query 中的字母序列,因此, 返回結果應該為其長度 3。請注意程式效率。 [分值:20]
您的回答:(空) (簡答題需要人工評分)
package com.interview; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 給定一個 query 和一個 text,均由小寫字母組成。 * 要求在 text 中找出以同樣的順序連 續出現在 query 中的最長連續字母序列的長度。 * 例如, query 為“acbac”,text 為 “acaccbabb”,那麼 text 中的“cba”為 * 最長的連續出現在 query 中的字母序列,因此, 返回結果應該為其長度 3。請注意程式效率。 */ /** * 剛開始思路有點偏,想要利用正則表示式,後來發現沒有必要... */ public class Test2 { public static void main(String[] args) { String query = "acbac"; String text = "acaccbabb"; boolean b = false; String result = ""; List<String> list = new ArrayList<>(); //中心思想 //找到query的不同組合,然後看text中是否包含該組合就好 System.out.println(text.contains("cba")); //i是最長連續字母序列的長度 for (int i = query.length(); i >= 1; i--) { //組合數 j int j = (query.length() + 1) - i; //m是每個字串的長度起點 for (int m = 0; m < j; m++) { String que = query.substring(m, m + i); //用來加快速度,如果list裡面包含有相同的字串就跳過 if (list.contains(que)) { continue; } //System.out.println(que); //可以用來檢視輸出結果 if (text.contains(que)) { result = que; b = true; break; } list.add(que); } if (b) { break; } } System.out.println("字串為:" + result); System.out.println("長度為:" + result.length()); } }