JAVA解法
class Solution {
public int lengthOfLongestSubstring(String s) {
// 若传进来的字符串长度小于等于 1,则直接返回其长度即可
if(s.length() <= 1){
return s.length();
}
// 定义开始指针的位置,以及初始化最长字串的记录值
int start = 0, max = 1;
// 将字符串转换为字符数组
char m[] = s.toCharArray();
// 遍历字符数组,外层从 1 开始
for(int i = 1; i < m.length; i++){
// 里层从 0 开始
for(int j = start; j < i; j++){
// 如果前后指针的字符一样,则重新定义开始的位置为当前的位置 +1,并跳出本次循环
if(m[i] == m[j])
{
start = j + 1;
break;
}
}
// 由于 start 从 0 开始的,求真正的长度时要 +1,用三目运算判断当前最长的子串与已记录的最长子串的比较且重新定义最长子串,可能还是原来的最长,也可能是当前子串最长
max = max > (i - start + 1) ? max : (i - start + 1);
}
// 返回遍历后的最终最长子串
return max;
}
}
题解分析
这道题要明确的一点是求最长子串而不是最长子序列。先对传进来的字符串长度进行判断,若传进来的字符串长度小于等于 1,则直接返回其长度即可,定义开始指针的位置,以及初始化最长字串的记录值,并将字符串转换为字符数组。开始遍历字符数组,外层从 1 开始,里层从 0 开始。
如果前后指针的字符一样,则重新定义开始的位置为当前的位置 +1,并跳出本次循环。每两次循环执行完后都要让当前字串长度与已记录的最长子串长度进行比较,由于 start 从 0 开始的,求真正的长度时要 +1,用三目运算判断当前最长的子串与已记录的最长子串的比较且重新定义最长子串,可能还是原来的最长,也可能是当前子串最长。待遍历完成后记录的最长字串即为所求,返回即可。
leetcode原题:3. 无重复字符的最长子串
评论区