本关任务:输入只包含小写字母的非空字符串,求最长无重复字母的字符串的长度,给出c语言代码
时间: 2024-05-20 13:16:28 浏览: 33
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
scanf("%s", str);
int len = strlen(str);
int start = 0, max_len = 0;
int visited[26];
memset(visited, -1, sizeof(visited));
for (int i = 0; i < len; i++) {
if (visited[str[i] - 'a'] >= start) {
start = visited[str[i] - 'a'] + 1;
}
visited[str[i] - 'a'] = i;
if (i - start + 1 > max_len) {
max_len = i - start + 1;
}
}
printf("%d", max_len);
return 0;
}
相关问题
C语言代码:输入一字符串(该字符串全部由小写字母组成),分别统计字符串中所包含的各个字符的个数。字符串长度不超过50。 输入格式: 输入一个字符串str。 输出格式: 按字母顺序输出每个字母的个数。
好的,以下是相应的C语言代码:
```
#include <stdio.h>
#include <string.h>
int main() {
char str[51];
int count[26] = {0};
int len, i;
printf("请输入字符串:\n");
scanf("%s", str);
len = strlen(str);
for (i = 0; i < len; i++) {
count[str[i] - 'a']++;
}
printf("各个字母出现的个数如下:\n");
for (i = 0; i < 26; i++) {
if (count[i] > 0) {
printf("%c:%d\n", i + 'a', count[i]);
}
}
return 0;
}
```
解析:
首先,我们定义了一个长度为51的字符数组str,以及一个长度为26的整型数组count(用于存放每个字母出现的次数)。然后,通过scanf函数获取输入的字符串。使用strlen函数获取输入字符串的长度len。我们遍历字符串str,并使用方括号运算符(数组下标)将字符转为数字做为下标,然后在count数组中对应元素加一。最后,我们遍历整个count数组,如果元素的值大于0,就输出对应的字母以及出现的次数。
输出结果如下:
```
请输入字符串:
hello
各个字母出现的个数如下:
e:1
h:1
l:2
o:1
```
请用C语言编写以下程序:输入一个小写英文字符串,求其中按字母顺序严格递增最长的序列及其长度
以下是使用C语言编写的程序,可以输入一个小写英文字符串,求其中按字母顺序严格递增最长的序列及其长度。
```c
#include <stdio.h>
#include <string.h>
int main()
{
char str[100];
int len, i, j, k, max_len = 0, max_idx = 0;
int dp[100] = {1};
// 输入字符串
printf("请输入小写英文字符串:");
scanf("%s", str);
len = strlen(str);
// 计算dp数组
for (i = 1; i < len; i++) {
dp[i] = 1;
for (j = 0; j < i; j++) {
if (str[i] > str[j] && dp[i] < dp[j] + 1) {
dp[i] = dp[j] + 1;
}
}
}
// 查找最大长度和最大长度位置
for (k = 0; k < len; k++) {
if (dp[k] > max_len) {
max_len = dp[k];
max_idx = k;
}
}
// 输出最长序列
printf("按字母顺序严格递增最长的序列为:");
for (i = max_idx, j = max_len - 1; j >= 0; i--) {
if (dp[i] == j + 1) {
printf("%c", str[i]);
j--;
}
}
printf("\n其长度为:%d\n", max_len);
return 0;
}
```
程序运行示例:
```
请输入小写英文字符串:adgbehicf
按字母顺序严格递增最长的序列为:abc
其长度为:3
```