我需要在由用戶給出的輸入中查找模式。如果找到了,則返回(開始,結束)位置。如何搜索字符串/字符數組中的模式?
例如: -
輸入= A B C D B C A D
模式尋找= D C A
輸出= 3,6
圖案不必連續發生。
它可以像D是在輸入的開始,C在中間和A在結束。 - 一個有效的場景。
我對此感到困惑的兩件事。
如何接受輸入?作爲一個數組?如果是,那麼作爲一個字符串或字符數組?
如何查找圖案?
我需要在由用戶給出的輸入中查找模式。如果找到了,則返回(開始,結束)位置。如何搜索字符串/字符數組中的模式?
例如: -
輸入= A B C D B C A D
模式尋找= D C A
輸出= 3,6
圖案不必連續發生。
它可以像D是在輸入的開始,C在中間和A在結束。 - 一個有效的場景。
我對此感到困惑的兩件事。
如何接受輸入?作爲一個數組?如果是,那麼作爲一個字符串或字符數組?
如何查找圖案?
輸入格式在這裏並不重要:您可以將字符串和序列都作爲字符串。訣竅在於決定使用哪種算法來解決問題。
在這種情況下,一個貪婪的策略將工作:
S
(串)和P
(模式)。si
爲字符串,pi
爲模式,並將它們都設置爲零。P.charAt(pi)
在S
從si
開始。如果字母不能從si
到端子串中找到,則該圖案中不存在P.charAt(pi)
第一次出現在S
,由一個設置si
該索引加一,和預先pi
。P
的末尾,則完成P
的長度。請注意,此問題可能存在多種解決方案。當存在解決方案時,該算法找到解決問題的第一個「詞典」索引集合。
我正在使用嵌套For循環。 還有其他更好的方法嗎? – R11G
@ R11G您只需要一個顯式循環 - 通過'P'的元素。通過調用'S.indexOf(si,P.charAt(pi))'而不是顯式的嵌套循環來尋找下一個匹配。 – dasblinkenlight
解決它使用正則表達式,但我無法解決與你建議的Algo。爲什麼這是一個「貪婪」的策略?任何特殊的特徵? – R11G
你的例子不清楚。 D C未在您的輸入中提供 – Udy
3,6如何根據您的輸入有效回答? –
這裏有一個問題。 該模式可能會出現空隙。不一定是連續的。 – R11G