[英]What is the worst-case running time for this algorithm?
我正在為Facebook面試學習一些代碼。 我了解該算法的作用,但無法弄清楚它的復雜性。 這是我訪問過的網站上所說的:
由於將回文圖擴展到其中心可能需要O(N)時間,因此總體復雜度為O(N ^ 2)。
有人可以向我解釋他們如何獲得運行時間,特別是平均情況和最壞情況嗎?
給出的問題是找到最大的回文子字符串。 我對弦樂有點陌生。
我還想知道你們是否認為我應該學習Manacher算法,即O(N)。 這是一個使用更少內存的更好的解決方案,但是對我來說真的很難理解。
string expandAroundCenter(string s, int c1, int c2) {
int l = c1, r = c2;
int n = s.length();
while (l >= 0 && r <= n-1 && s[l] == s[r]) {
l--;
r++;
}
return s.substr(l+1, r-l-1);
}
string longestPalindromeSimple(string s) {
int n = s.length();
if (n == 0) return "";
string longest = s.substr(0, 1); // a single char itself is a palindrome
for (int i = 0; i < n-1; i++) {
string p1 = expandAroundCenter(s, i, i);
if (p1.length() > longest.length())
longest = p1;
string p2 = expandAroundCenter(s, i, i+1);
if (p2.length() > longest.length())
longest = p2;
}
return longest;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.