【20190320】【每天一道算法题】无重复字符的最长子串(双指针)

问题:

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

例如:

输入:"pwwkew"。

输出:3。

解释:因为无重复字符的最长子串是 "wke",所以其长度为 3。

请注意,你的答案必须是子串的长度,"pwke" 是一个子序列,不是子串。


解释及代码:

/* 滑窗的方式*/
#include
#include
#include

int lengthOfLongestSubstring(char* s);

void main()
{
	char str[50];
	int result;
	printf("请输入字符串:\n");
	gets_s(str);  //获取字符串,直到换行为止
	printf("输入的字符串为:%s\n",str);

	result=lengthOfLongestSubstring(str);

	printf("最长无重复字符子串长度为:%d\n",result);

	system("pause");
}

int max(int a,int b)  //(模块化)
{
    if (a>b)
        return a;
    else 
        return b;
}

int lengthOfLongestSubstring(char* s) 
{
    int length=strlen(s),result=0;
    int map[128]={0};  //这里选取50,100会出错,为什么?
    for (int j=0,i=0;i
/*方法二*/
int lengthOfLongestSubstring(char* s) 
{
	int n,i,j,k;
	int len = 1,max_len = 1;
	n = strlen(s);
	//printf("%d\n",n);
   max_len = n== 0 ? 0:1;
	for(i = 0; i < n;++i)
	{
		for(j = i+1;j < n;++j)
		{
			for(k = i;k < j;++k)
			{
				//printf("%c %c\n",s[k],s[j]);
				if(s[k] != s[j] && s[k] != '\0' && s[j] != '\0')
				{
					++len;
				}
				else
				{
					k=j;
					j=n;
				}
			}
			//printf("%d.",len);
			if(len > max_len)
				max_len = len;
			len = 1;
		}
	}
	return max_len;
}

 

你可能感兴趣的:(每天一道算法题)