class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param a string字符串 待计算字符串
* @return int整型
*/
int solve(string a) {
// write code here
int n = a.length();
//abcd
//0->4
for (int len = n/2*2; len >= 2; len -= 2) {
for (int i = 0; i < n; i++) {
if (i + len - 1 >= n) break;
int flag = 0;
for (int j = 0; j < len / 2; j++) {
if (a[i + j] != a[i + j + len/2]) {
flag=1;
break;
}
}
if (flag == 0) return len;
}
}
return 0;
}
};
给出一棵树的前序遍历和中序遍历,请构造这颗二叉树。
递归:
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param preorder int整型vector
* @param inorder int整型vector
* @return TreeNode类
*/
TreeNode* dfs(vector<int>&preorder, vector<int>&inorder, int prel, int prer, int inl, int inr) {
if (prel > prer) return NULL;
TreeNode* root = new TreeNode(preorder[prel]);
int i;
for (i = inl; i <= inr; i++) {
if (inorder[i] == preorder[prel]) {
break;
}
}
root->left = dfs(preorder, inorder, prel + 1, prel + (i - inl), inl, i - 1);
root->right = dfs(preorder, inorder, prel + (i - inl) + 1, prer , i + 1, inr);
return root;
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
// write code here
int n = preorder.size();
return dfs(preorder, inorder, 0, n-1, 0, n-1);
}
};