请编写一个算法来解决这个问题：给定一个字符串，找到它的最长无重复子字符串的长度。
abcbda
这里有一种可能的算法：

1. 初始化指针 i 和 j，用来表示目前考虑的无重复子串。
   将 j 设为 -1 表示目前还没有选定任何字符。

2. 初始化哈希表 dict，用来存储每个字符最后出现的位置，初始为空。

3. 从左到右遍历字符串 s 中的每个字符 c：

   a. 如果 dict[c] > j，说明字符 c 曾经出现过，并且它的最后一次出现在 i 和 j 之间。
      更新 j 为 dict[c]，表示新的无重复子串的起始点为 dict[c]+1。

   b. 更新 dict[c] 为当前字符最后出现的位置。

   c. 如果 j-i+1 大于已知的最长无重复子串的长度 maxlen，更新 maxlen。

4. 返回 maxlen。

这个算法的时间复杂度为 O(n)，其中 n 是字符串 s 的长度。空间复杂度也是 O(n)，因为哈希表 dict 最多需要存储 n 个字符。