1930。唯一長度為 3 的回文子序列
難度:中
主題:雜湊表、字串、位元操作、前綴和
給定一個字串 s,傳回作為 s 的 子序列的長度為三的唯一回文數的數量。
注意即使有多種方式獲得同一個子序列,仍然只計算一次。
回文是一個向前和向後讀取相同的字串。
字串的子序列是在原始字串中刪除一些字元(可以沒有)而產生的新字串,而不改變剩餘字元的相對順序。
範例1:
範例2:
範例 3:
約束:
提示:
解:
我們可以使用一種高效的演算法,利用前綴和後綴字元追蹤來計算所有有效的回文子序列。
追蹤字首:
使用數組儲存字串中每個位置左側遇到的字元集。這將有助於有效地檢查一個字元是否可以構成回文子序列的第一部分。
曲目後綴字元:
使用另一個陣列來儲存字串中每個位置右側遇到的字元集。這將有助於有效地檢查一個字元是否可以構成回文子序列的第三部分。
計算回文子序列:
對於字串中的每個字符,將其視為長度為 3 的回文串的中間字符。檢查前綴和後綴字元的所有有效組合以確定唯一的回文。
商店結果:
使用雜湊集儲存唯一的回文子序列,確保不重複。
讓我們用 PHP 實作這個解:1930。唯一長度為 3 的回文子序列
<?php /** * @param String $s * @return Integer */ function countPalindromicSubsequence($s) { ... ... ... /** * go to ./solution.php */ } // Test cases echo countPalindromicSubsequence("aabca") . PHP_EOL; // Output: 3 echo countPalindromicSubsequence("adc") . PHP_EOL; // Output: 0 echo countPalindromicSubsequence("bbcbaba") . PHP_EOL; // Output: 4 ?>
前綴數組:
後綴數組:
中間字元:
雜湊映射:
時間複雜度:O(n)
空間複雜度:O(n)
程式碼為給定的範例產生正確的結果:
聯絡連結
如果您發現本系列有幫助,請考慮在 GitHub 上給 存儲庫 一個星號或在您最喜歡的社交網絡上分享該帖子? 。您的支持對我來說意義重大!
如果您想要更多類似的有用內容,請隨時關注我:
以上是唯一長度順序子序列的詳細內容。更多資訊請關注PHP中文網其他相關文章!