王廷瑋|數位醫療|智慧醫療: 5. Longest Palindromic Substring WFU

2024年7月1日 星期一

5. Longest Palindromic Substring

5. Longest Palindromic Substring


給定一個字符串 s,返回 s 中最長的回文子串。


Python


class Solution:
def longestPalindrome(self, s: str) -> str:
if len(s) < 2:
return s

start, max_length = 0, 1

def expandAroundCenter(left: int, right: int):
nonlocal start, max_length
while left >= 0 and right < len(s) and s[left] == s[right]:
current_length = right - left + 1
if current_length > max_length:
start = left
max_length = current_length
left -= 1
right += 1

for i in range(len(s)):
expandAroundCenter(i, i) # odd length palindromes
expandAroundCenter(i, i + 1) # even length palindromes

return s[start:start + max_length]

16.44MB 328ms


C++


#include <string>
using namespace std;

class Solution {
public:
string longestPalindrome(string s) {
if (s.size() < 2) {
return s;
}

int start = 0, maxLength = 1;

auto expandAroundCenter = [&](int left, int right) {
while (left >= 0 && right < s.size() && s[left] == s[right]) {
int currentLength = right - left + 1;
if (currentLength > maxLength) {
start = left;
maxLength = currentLength;
}
left--;
right++;
}
};

for (int i = 0; i < s.size(); ++i) {
expandAroundCenter(i, i); // odd length palindromes
expandAroundCenter(i, i + 1); // even length palindromes
}

return s.substr(start, maxLength);
}
};

8.06MB, 12ms


Javascript


/**
* @param {string} s
* @return {string}
*/
var longestPalindrome = function(s) {
if (s.length < 2) {
return s;
}

let start = 0, maxLength = 1;

const expandAroundCenter = (left, right) => {
while (left >= 0 && right < s.length && s[left] === s[right]) {
let currentLength = right - left + 1;
if (currentLength > maxLength) {
start = left;
maxLength = currentLength;
}
left--;
right++;
}
};

for (let i = 0; i < s.length; i++) {
expandAroundCenter(i, i); // odd length palindromes
expandAroundCenter(i, i + 1); // even length palindromes
}

return s.substring(start, start + maxLength);
};

50.27MB, 76ms