Lang:G++
Edit12345678910111213141516171819202122232425262728#include <iostream>#include <unordered_map>using namespace std;int getMinStep(string &s, int b, int e, unordered_map<string, int> &map) {if (b >= e) return 0;if (map.find(s.substr(b, e - b + 1)) != map.end()) return map[s.substr(b, e - b + 1)];int ret = 0;if (s[b] == s[e]) ret = getMinStep(s, b + 1, e - 1, map);else {ret = getMinStep(s, b + 1, e, map) + 1;ret = min(getMinStep(s, b + 1, e - 1, map) + 1, ret);ret = min(ret, getMinStep(s, b, e - 1, map) + 1);}map[s.substr(b, e - b + 1)] = ret;// cout << s.substr(b, e - b + 1) << " " << e << " " << b << " " << ret << endl;return ret;}int main() {string s;cin >> s;unordered_map<string, int> map;cout << getMinStep(s, 0, s.size() - 1, map) << endl;return 0;}