C语言练习题2

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

示例 1:

输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:

输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:

输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
  请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
示例 4:

输入: s = ""
输出: 0

来源:力扣(LeetCode)

解题思路:

空字符串:0

一个字符:不重复的最长就1

大于1个字符:

如:pwwdskef

 j:从下标为一的字符(下标0开始),到最后一个;要是没有下标为1的字符,那不重复的字符就是0/1个。

i:从下标为0的字符开始,每次循环到J之前,判断是否步进的每个i都不等于J所指的值。并实时记录每轮i循环里的不等于j 的字符的个数num(每轮更新一次,只有该伦次的num比前边的大)

如果i在某次便利的时候,发现有个字符等于j指的字符,则num计数重置为1,说明出现了重复字符串,并且i及之前的字符串不能再用了,从i后边的字符,重新计数比较

int lengthOfLongestSubstring(char * s){
int i =0;
int j =1;
int number = 1;
int temp = 1;
int pts = 0;
if(s[0]=='')
{
    return 0;
}
for(j=1;s[j]!= '';j++)
{
    for(int i = pts;i<j;i++)
    {
        if(s[i] != s[j])
        {
            number++;
        }else{
            number =1;
            pts = i+1;;

        }
    }
    if(number >temp)
    {
        temp = number;
    }
    number=1;
}


return temp;
}
原文地址:https://www.cnblogs.com/8335IT/p/14604147.html