【leetcode】最長迴文字符-暴力搜索

一、問題點

1.1 對字符串部分內容,根據其下標計算長度,應該用(j - i + 1),而不是“j - i"
1.2 迴文字符串滿足條件的方法:對稱,也就是取mid值,然後從小到大,看其是否對稱;
1.3 malloc內存時,需要在最大長度的基礎上加一,用於放置’\0’,結束符;
1.4 考慮迴文字符的特殊場景,即在沒有迴文字符時,應返回字符串的第一個字母;

二、代碼

bool isPalindrome(char *s, int left, int right)
{
int len = right - left + 1;
int i;
for (i = 0; i < len / 2; i++) {
if (s[left + i] != s[left + len - i - 1]) {
return false;
}
}
return true;
}

char * longestPalindrome(char * s){
int i, j;
int len = strlen(s);
int max = 0;
int left = 0, right = 0;
char *ans;

for (i = 0; i < len - 1; i++) {
for (j = i + 1; j < len; j++) {
if((isPalindrome(s, i, j)) && ((j - i + 1) > max)) {
max = j - i + 1;
left = i;
right = j;
}
}
}
if (max == 0) {
max = 1;
}
ans = (char *)malloc((max + 1) * sizeof(char));
for (i = left; i <= right; i++) {
ans[i - left] = s[i];
}
ans[max] = '\0';
return ans;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章