- 长臂猿-企业应用及系统软件平台
声音替换。
下面是今天的算法题
void expandAroundCenter(const char *s, int left, int right, int *start, int *maxLen) {
while (left >= 0 && right < strlen(s) && s[left] == s[right]) {
left--;
right++;
}
if (*maxLen < right - left - 1) {
*start = left + 1;
*maxLen = right - left - 1;
}
}
char* longestPalindrome(char* s) {
int start = 0, maxLen = 0;
for (int i = 0; i < strlen(s); i++) {
expandAroundCenter(s, i, i, &start, &maxLen); // 奇数长度
expandAroundCenter(s, i, i + 1, &start, &maxLen); // 偶数长度
}
char *result = (char*)malloc(sizeof(char) * (maxLen + 1));
strncpy(result, s + start, maxLen);
result[maxLen] = '\0';
return result;
}
public class Solution {
public String longestPalindrome(String s) {
if (s == null || s.length() < 1) return "";
int start = 0, end = 0;
for (int i = 0; i < s.length(); i++) {
int len1 = expandAroundCenter(s, i, i); // 奇数长度
int len2 = expandAroundCenter(s, i, i + 1); // 偶数长度
int len = Math.max(len1, len2);
if (len > end - start) {
start = i - (len - 1) / 2;
end = i + len / 2;
}
}
return s.substring(start, end + 1);
}
private int expandAroundCenter(String s, int left, int right) {
while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {
left--;
right++;
}
return right - left - 1;
}
}
def longest_palindrome(s: str) -> str:
def expand_around_center(left: int, right: int) -> str:
while left >= 0 and right < len(s) and s[left] == s[right]:
left -= 1
right += 1
return s[left + 1:right]
if not s:
return ""
start, end = 0, 0
for i in range(len(s)):
len1 = len(expand_around_center(i, i))
len2 = len(expand_around_center(i, i + 1))
max_len = max(len1, len2)
if max_len > end - start:
start = i - (max_len - 1) // 2
end = i + max_len // 2
return s[start:end + 1]
s = "babad"
print(longest_palindrome(s))