如题java实现求字符串中出现次数最多的字串(单个字符不算)如"abcbcbcabc"的最终答案是bc 共出现了4 次,
走同样的路,发现不同的人生
假設字串S中子字串s出現x次,那麼子字串s的子字串s2,至少也會出現x次,或更多
又單一字元不算,那麼問題來了,最後出現次數最多的子字串之一,必然是2個字元的子字串
如果只是想找出任一個符合條件的,那就只需要找一個2字符的子字串
如果是要把所有出現次數=最大出現次數的子字串全找出來就稍微要複雜一點.
1.假設字串S長度是N2.把字串中相鄰的2個字元組合,變成N-1個子字串,然後統計2字元位元組串,看看哪個出現的最多。 3.如果沒有哪個2字元字串次數大於1,搜尋結束4.如果有多個2字元字串次數相等切大於1,那麼對比這些2字元字串,是否存在第一個字串的結尾等於第二個字串開頭的字串,例如ab 出現3次, bc出現3次, 那麼abc有可能也會出現多次, 如果出現這種情況,就判斷3字元字串的出現次數,如果次數小於2字元字串出現的次數,那麼答案就是2字元字串,否則就可能是3字元字串。 5.然後向上繼續偵測4,5,6字元字串的情況
另外,需要明確一下字串出現次數的統計演算法,例如 aaaaaa中子字串aa到底是出現了3次還是5次?
感覺正則好弄一點。不用正則肯定需要迭代或遞歸解決
假設字串S中子字串s出現x次,那麼子字串s的子字串s2,至少也會出現x次,或更多
又單一字元不算,那麼問題來了,最後出現次數最多的子字串之一,必然是2個字元的子字串
如果只是想找出任一個符合條件的,那就只需要找一個2字符的子字串
如果是要把所有出現次數=最大出現次數的子字串全找出來就稍微要複雜一點.
1.假設字串S長度是N
2.把字串中相鄰的2個字元組合,變成N-1個子字串,然後統計2字元位元組串,看看哪個出現的最多。
3.如果沒有哪個2字元字串次數大於1,搜尋結束
4.如果有多個2字元字串次數相等切大於1,那麼對比這些2字元字串,是否存在第一個字串的結尾等於第二個字串開頭的字串,例如ab 出現3次, bc出現3次, 那麼abc有可能也會出現多次, 如果出現這種情況,就判斷3字元字串的出現次數,如果次數小於2字元字串出現的次數,那麼答案就是2字元字串,否則就可能是3字元字串。
5.然後向上繼續偵測4,5,6字元字串的情況
另外,需要明確一下字串出現次數的統計演算法,例如 aaaaaa中子字串aa到底是出現了3次還是5次?
感覺正則好弄一點。不用正則肯定需要迭代或遞歸解決