CareerCup Facebook Total number of substring palindrome

Write a function for retrieving the total number of substring palindromes. 
For example the input is 'abba' then the possible palindromes= a, b, b, a, bb, abba 
So the result is 6. 

Updated at 11/11/2013: 

After the interview I got know that the O(n^3) solution is not enough to go to the next round. It would have been better to know before starting implementing the solution unnecessarily ...


------------------------------------------------------------------------


Similar to leetcode Longest Palindromic Substring Part II in my blog, the code is like:

#include <iostream>
#include <map>
#include <algorithm>
#include <limits.h>
#include <assert.h>
#include <string.h>
#include <vector>
using namespace std;
string preprocess(string s) {
  string res = "^#";
  for (int i = 0; i < s.length(); ++i) {
    res += s[i];
    res += '#';
  }
  res += '$';
  return res;
}
int getPalindromeNum(string s) {
  string str = preprocess(s);
  int i, j, len = str.length(), C = 0, R = 0, res = 0, ii;

  vector<int> T(len + 1, 0), P(len + 1, 0);

  for (i = 1; i < len; ++i) {
    ii = 2*C - i;
    P[i] = (R - i) > 0 ?

min(P[ii], R-i) : 0; //bug1: P[i] = (R - i) > 0 ? P[i] : 0 while (str[i + P[i] + 1] == str[i - P[i] - 1]) ++P[i]; res += (P[i] + 1) / 2; //bug2: res += P[i]; if (i + P[i] > R) { C = i; R = i + P[i]; } } return res; } int main() { //string s = "abcba"; string s = "aaaaa"; int res = getPalindromeNum(s); return 0; }



原文地址:https://www.cnblogs.com/gccbuaa/p/7357530.html