帮我写一段c++的LCP算法
时间: 2023-02-07 22:03:51 浏览: 86
LCP (Longest Common Prefix) 算法是用于查找两个字符串的最长公共前缀的算法。下面是一个用 C 语言实现的 LCP 算法的例子:
```
#include <stdio.h>
#include <string.h>
int main()
{
char str1[100] = "abcdefg";
char str2[100] = "abcdeff";
int i = 0;
int len1 = strlen(str1);
int len2 = strlen(str2);
int len = (len1 < len2) ? len1 : len2; // 取较短的长度
while (i < len && str1[i] == str2[i])
i++;
if (i == 0)
printf("没有公共前缀\n");
else
printf("最长公共前缀: %.*s\n", i, str1);
return 0;
}
```
上面的代码中,首先我们定义了两个字符数组 `str1` 和 `str2`,然后用变量 `i` 来记录公共前缀的长度。接着,我们用 `while` 循环来比较两个字符串的每一位是否相同,如果相同,就将 `i` 的值加 1。最后,如果 `i` 的值为 0,则两个字符串没有公共前缀,否则输出最长公共前缀。
相关问题
帮我写一段二叉树算法C++代码
好的,下面是一个简单的二叉树遍历算法的C++代码:
```c++
#include <iostream>
using namespace std;
// 二叉树节点结构
struct TreeNode {
int data;
TreeNode* left;
TreeNode* right;
TreeNode(int data) {
this->data = data;
left = nullptr;
right = nullptr;
}
};
// 二叉树遍历函数
void traverse(TreeNode* node) {
if (node == nullptr) {
return;
}
traverse(node->left);
traverse(node->right);
cout << node->data << " ";
}
int main() {
// 构建一个二叉树
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
// 遍历二叉树
cout << "二叉树遍历结果: ";
traverse(root);
return 0;
}
```
这个程序创建了一个二叉树,并使用递归函数`traverse()`遍历二叉树。这里使用的是后序遍历算法,即先遍历左子树,再遍历右子树,最后访问根节点。
帮我写一段C++的天牛须算法
好的,以下是C语言实现的天牛须算法:
```
#include <stdio.h>
#define MAX_N 100001
int n, m;
int a[MAX_N];
int main() {
scanf("%d %d", &n, &m);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
int l = 0, r = 0;
int sum = 0, ans = 0;
while (r < n) {
while (r < n && sum + a[r] <= m) {
sum += a[r];
r++;
}
ans = ans > r - l ? ans : r - l;
if (l == r) {
r++;
continue;
}
sum -= a[l];
l++;
}
printf("%d", ans);
return 0;
}
```
此段代码实现了天牛须算法,可以计算一个数列中不超过给定数值的最长区间长度。其中,`n`表示数列长度,`m`表示给定值,`a`为数列。
算法思路描述:
1.使用双指针`l`和`r`表示当前区间的左右端点,`sum`表示当前区间的和。
2.将右端点`r`向右移动,直到当前区间和不超过给定值`m`为止。
3.记录并更新当前区间长度(即`r - l`)的最大值。如果左右端点重合,则右端点向右移动一位。
4.将左端点`l`向右移动一位,更新当前区间和。
5.重复步骤2,直到右端点超出数列范围为止。
最后,输出最大区间长度的值。