输出字符串中最长无重复字符串长度,并输出最长无重复字符串。
例如:输入 char s[] = "abcdbac"
输出:最长无重复字符串为 = "abcd" 最长无重复字符串长度 = 4
思路:定义一个ASCII码大小的数组n,找到字符串第一个字符所在的ASCII码在数组n中所在位置(例如'a'的大小为97,则定位到n[97]),将其定位为开始位,并将数组在当前位置的值致0。再找出字符串第二个字符所在的ASCII码在数组n中所在位置,如果与第一个字符不相等,开始位+1,并将数组在当前位置的值致0。如果与第一个字符相等,则开始位在这一位开始。
#include <stdio.h>
#include <string.h>
int main()
{
char s[20];//定义一个字符数组
printf("请输入一个字符串 ");
scanf("%s",s);//输入字符串
int length = 0;
char string[50];
int start = 0;//定位刚开始的地址
int pos1 = 0;
int pos2 = 0;
int n[256] = {0};//ASCii码值大小
for (int end = 0; s[end] != '\0'; end++)
{
char ptr = s[end];
if (n[ptr] > start)
{
start = n[ptr];
}
n[ptr] = end + 1;
if (end - start + 1 > pos1)
{
pos1 = end - start + 1;
pos2 = start;
}
}
strncpy(string, s + pos2, pos1);
string[pos1] = '\0';
length = pos1;
printf("最长无重复字符子串的长度: %d\n", length);
printf("最长无重复字符子串: %s\n", string);
return 0;
}