同步发于 JuzerTech 网站,里面有我软、硬件学习的纪录与科技产品开箱,欢迎进去观看。
题目为给定一个字符串,寻找其中最长的子字符串,并且此子字符串不得有重复之字符。
题目与范例如下
Given a string s, find the length of the longest substring without repeating characters.
Example 1:
Input: s = "abcabcbb"
Output: 3
Explanation: The answer is "abc", with the length of 3.
Example 2:
Input: s = "bbbbb"
Output: 1
Explanation: The answer is "b", with the length of 1.
Example 3:
Input: s = "pwwkew"
Output: 3
Explanation: The answer is "wke", with the length of 3.
Notice that the answer must be a substring, "pwke" is a subsequence and not a substring.
Example 4:
Input: s = ""
Output: 0
Constraints:
0 <= s.length <= 5 * 104
s consists of English letters, digits, symbols and spaces
我采用的策略为,使用一个变量纪录子字符串的起始点,子字符串的终止点为目前寻访到的字符,并逐次检查新加入的字符是否与子字符串内的字符有重复,有则把子字符串的起始点设为重复的下一个,每次比较是否比记录中的最长长度还长。
下方为我的代码
void comparechar(char *str,char target,int *submin, int *submax){
for(int i = *submin ; i < *submax ; i++ ){
if(str[i] == target){
*submin = i+1;
break;
}
}
}
int lengthOfLongestSubstring(char * s){
int index = 0,submin = 0,max = 0;
while(s[index] != '\0'){
comparechar(s,s[index],&submin,&index);
if(index - submin + 1 > max)
max = index - submin + 1;
index++;
}
return max;
}