給定乙個字串 s,你可以通過在字串前面新增字元將其轉換為回文串。找到並返回可以用這種方式轉換的最短回文串。
示例 1:
輸入: "aacecaaa"
輸出: "aaacecaaa"
示例 2:
輸入: "abcd"
輸出: "dcbabcd"
要找到最短的新增內容,就相當於從字串位置0開始,查詢到最長的回文串,最長回文串後面的部分稱為有效字尾,我們將有效字尾反轉,新增到原有字串的最前面就可以了
/*
* 需求
給定乙個字串 s,你可以通過在字串前面新增字元將其轉換為回文串。找到並返回可以用這種方式轉換的最短回文串。
示例 1:
輸入: "aacecaaa"
輸出: "aaacecaaa"
示例 2:
輸入: "abcd"
輸出: "dcbabcd"
gcc shortestpalindrome.c -g -o a.exe -ddebug
*/#include #include #include #include #include #ifdef debug
#define log(fmt, args...) fprintf(stdout, fmt, ##args)
#define breaker(a, b, c) breaker(a, b, c)
#else
#define log(fmt,...)
#define breaker(a, b, c)
#endif
#define true 1
#define false 0
#define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) > (b) ? (b) : (a))
bool ispalindromestr(char * head, char * tail)
head++;
tail--;
} return ret;
}int longestpalindromesubstrfromhead(char * s, char ** pdrear)
do rear--;
} while(rear != s);
*pdrear = rear;
pdlen = rear - s + 1;
return pdlen;
}char * shortestpalindrome(char * s)
char * rear = null, * pdrear = null;
char * substr = null, *p = null;
int pdlen = 0, len = 0, total = 0;
len = strlen(s);
if(0 == len)
rear = s + len - 1;
pdlen = longestpalindromesubstrfromhead(s, &pdrear);
total = len - pdlen + len + 1; /*字尾長度 + 原有字串長度 + '\0' */
最短回文串
給定乙個字串 s,你可以通過在字串前面新增字元將其轉換為回文串。找到並返回可以用這種方式轉換的最短回文串。示例 1 輸入 aacecaaa 輸出 aaacecaaa 示例 2 輸入 abcd 輸出 dcbabcd 解法1思路 因為是在前面加乙個最少的資料,我們先想最笨的辦法,就是在abcd前面加上a...
最短回文串 題解
最短回文串 palindrome.pas c cpp 如果乙個字串正過來讀和倒過來讀是一樣的,那麼這個字串就被稱作回文串。例如abcdcba,abcddbca就是回文串,而abcdabcd不是。你要解決的問題是 對於任意乙個字串,輸出將這個字串變為回文串需要插入的最少字元個數,比如,ab3bd只需要...
作業 最短回文串
最短回文串 palindrome.pas c cpp 如果乙個字串正過來讀和倒過來讀是一樣的,那麼這個字串就被稱作回文串。例如 abcdcba,abcddbca 就是回文串,而 abcdabcd 不是。你要解決的問題是 對於任意乙個字串,輸出將這個字串變為回文串需要插入的最 少字元個數,比如,ab3...