LeetCode开荒 - 无重复字符的最长子串

显然题里让用的是滑动窗口、哈希表之类的东西, 但是暴力它是真出奇迹啊 (奇迹在哪儿啊我请问 [汤圆]

应该是面试的高频题。

描述

给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。

示例 1:

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。注意 "bca" 和 "cab" 也是正确答案。

示例 2:

输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

提示:

  • 0 <= s.length <= 5 * 10<sup>4</sup>
  • s 由英文字母、数字、符号和空格组成

代码

该说不说补丁打的非常的多啊……


class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        string tmp = "";
        bool count[101], spaceChar = false, symbols[15];
        int ans = 0;
        if (s == ""){
            return 0;
        }
        if(s.length() == 1){
            return 1;
        }
        for(int l=1;l<=s.length() - 1;l++){
            for(int i=l;i<=s.length();i++){
                if(!count[s[i-1]-' ']){
                    count[s[i-1]-' '] = true;
                    tmp += s[i-1];
                } else {
                    break;
                }
            }
            if(tmp.length() > ans){
                ans = tmp.length();
            }
            tmp = "";
            for(int i=0;i<101;i++){
                count[i] = false;
            }
            spaceChar = false;
        }
        if(tmp.length() > ans){
            ans = tmp.length();
        }
        return ans;
    }
};

1764837210143

起码过了对吧(心虚)

Just Programming With ♥️ & Peace
使用 Hugo 构建
主题 StackJimmy 设计