Palindrome Partitioning

http://oj.leetcode.com/problems/palindrome-partitioning/  

 

bool is_hw(int i, int j, string s, vector<vector<int>>& table) {
  if (table[i][j] != 0) {
    return table[i][j] > 0;
  }

  if (s[i] != s[j]) {
    table[i][j] = -1;
    return false;
  } else {
    if (j - i <= 2) {
      table[i][j] = 1;
      return true;
    } else {
      table[i][j] = is_hw(i+1, j-1, s, table);
      return table[i][j] > 0;
    }
  }
}


// we are processing s[i, j];
void  partition(vector<vector<string>>& ret, vector<string>& a, vector<vector<int>>& table, string s, int i, int j) {
  if (i >= s.size()) {
    ret.push_back(a);
    return;
  }

  for (int e = i; e <= j; e++) {
    if (is_hw(i, e, s, table)) {
      string slice = s.substr(i, e - i + 1);
      a.push_back(slice);
      partition(ret, a, table, s, e+1, j);
      a.pop_back();
    }
  }
}

void get_all_hw(string s) {
  int l = s.size();
  vector<vector<int>> table(l, vector<int>(l, 0));
  vector<vector<string>> ret;
  vector<string> t;
  partition(ret, t, table, s, 0, l-1);
  for (int i = 0; i < ret.size(); i++) {
    for (int j = 0; j < ret[i].size(); j++) {
      printf("%s ", ret[i][j].c_str());
    }
    printf("\n");
  }
  system("pause");
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值