1. Sliding window

  1. class Solution(object):
  2. def lengthOfLongestSubstring(self, s):
  3. """
  4. :type s: str
  5. :rtype: int
  6. """
  7. if len(s) <= 1:
  8. return len(s)
  9. l = r = 0
  10. max_length = 1
  11. mp = []
  12. for i in range(len(s)):
  13. r = i
  14. if s[i] in mp:
  15. for j in range(l, r):
  16. if s[j] == s[i]:
  17. l = j + 1
  18. break
  19. else:
  20. mp.append(s[i])
  21. max_length = max(r - l + 1, max_length)
  22. return max_length
  1. func lengthOfLongestSubstring(s string) int {
  2. if len(s) <= 1 { return len(s) }
  3. var l int = 0
  4. var r int = 0
  5. var size int = len(s)
  6. var longest int = 1
  7. var appeared []byte
  8. for i := 0; i < size; i++ {
  9. r = i
  10. if isValueInList(appeared, s[i]) {
  11. for j := l; j < r; j++ {
  12. if s[j] == s[i]{
  13. l = j + 1
  14. break
  15. }
  16. }
  17. } else {
  18. appeared = append(appeared, s[i])
  19. }
  20. if (r - l + 1 > longest){
  21. longest = r - l + 1
  22. }
  23. }
  24. return longest
  25. }
  26. func isValueInList(list []byte, val byte) bool {
  27. for _, v := range list {
  28. if v == val{
  29. return true
  30. }
  31. }
  32. return false
  33. }