1 import java.util.Scanner;
2
3 /**
4 * Created by qmq
5 * Given a string, find the length of the longest substring without repeating characters.
6 * Example 1:
7 * Input: "abcabcbb"
8 * Output: 3
9 * Explanation: The answer is "abc", with the length of 3.
10 *
11 * @ 18-10-12
12 **/
13 class Solution7 {
14 public int longestSubstring(String s) {
15 if (s.length() < 2) {
16 return s.length();
17 }
18 int max = -1, start = 0;
19 for (int i = 1; i < s.length(); i++) {
20 if (i < s.length()) {
21 int index = s.substring(start, i).indexOf(s.charAt(i));
22 if (index != -1) {
23 max = Math.max(max, i - start);
24 start += (index + 1);
25 } else {
26 max = Math.max(max, i - start);
27 }
28 }
29 }
30 return max != -1 ? max : s.length();
31 }
32 }
33
34 public class LongestSubstring {
35 public static void main(String[] args) {
36 Solution7 sol = new Solution7();
37 Scanner scanner = new Scanner(System.in);
38 String str = scanner.nextLine();
39 System.out.println(sol.longestSubstring(str));
40 }
41 }
1 #include <bits/stdc++.h>
2 using namespace std;
3
4 // Given a string, find the length of the longest substring without repeating characters.
5 // Example 1 :
6 // Input : "abcabcbb" Output : 3 Explanation : The answer is "abc",
7 // with the length of 3.
8 // the first thought is to round the first situation charactor
9
10 // new hashmap
11 // hashmap.put(x)
12 // cnt(x)
13 // if(x>1)
14 // cnt the number[xi]
15 // new hashmap
16 // continue
17 // until find
18 // return the number[xi].max
19
20 class Solution
21 {
22 public:
23 int LongestSubstring(char *s)
24 {
25 int len = 0;
26 char *end = s, *temp;
27 char *addressTable[128] = {NULL};
28 while (*end) //非空地址
29 {
30 temp = addressTable[*end]; //哈希表
31 addressTable[*end] = end; //哈希表end位置初始化
32 if (temp >= s) //当前子域大于历史域,则进行域长度更新
33 {
34 len = end - s > len ? end - s : len;
35 s = temp + 1;
36 }
37 end++;
38 }
39 len = end - s > len ? end - s : len; //排除最后一次迭代影响
40 return len;
41 }
42 };
43 int main()
44 {
45 char *str;
46 cin >> str;
47 Solution sol;
48 cout << sol.LongestSubstring(str) << endl;
49 return 0;
50 }