0
点赞
收藏
分享

微信扫一扫

LeetCode 1763. 最长的美好子字符串题解

笙烛 2022-02-01 阅读 40

1763. 最长的美好子字符串题解

题目来源:1763. 最长的美好子字符串

2022.02.01每日一题

法一:暴力解法

暴力求解每一种可能的字符串,从其中选中最优的结果

具体代码已经注释如下

class Solution {
public:
    string longestNiceSubstring(string s) {
        string res = "";
        // 遍历字符串,寻找所有的字符串字串
        for (int i = 0; i < s.size(); i++) {
            for (int j = i + 1; j < s.size(); j++) {
                // 判断每个字符字串是否符合要求,并且是否长度大于当前满足条件的字符串字串
                if (j - i + 1 > res.size() && check(s.substr(i, j - i + 1))) {
                    res = s.substr(i, j - i + 1);
                }
            }
        }
        return res;
    }

    bool check(string s) {
        // 创建set来判断每个子字符串中字符是否出现
        set<char> Count;
        for (char ch: s) {
            Count.insert(ch);
        }
        for (char ch: s) {
            // 创建两个临时变量,一个用来存放小写字符,一个同来存放大写字符
            char temp1 = tolower(ch), temp2 = toupper(ch);
            // 判断大小写字符是否在Count之中,如果有一个不在就返回false
            if (!Count.count(temp1) || !Count.count(temp2)) {
                return false;
            }
        }
        return true;
    }
};
class Solution {
    public String longestNiceSubstring(String s) {
        String res = "";
        // 遍历字符串,寻找所有的字符串字串
        for (int i = 0; i < s.length(); i++) {
            for (int j = i + 1; j < s.length(); j++) {
                // 判断每个字符字串是否符合要求,并且是否长度大于当前满足条件的字符串字串
                if (j - i + 1 > res.length() && check(s.substring(i, j + 1))) {
                    res = s.substring(i, j + 1);
                }
            }
        }
        return res;
    }

    public boolean check(String s) {
        // 创建set来判断每个子字符串中字符是否出现
        Set<Character> count = new HashSet<>();
        for (char ch : s.toCharArray()) {
            count.add(ch);
        }
        for (char ch : s.toCharArray()) {
            // 创建两个临时变量,一个用来存放小写字符,一个同来存放大写字符
            char temp1 = Character.toLowerCase(ch), temp2 = Character.toUpperCase(ch);
            // 判断大小写字符是否在Count之中,如果有一个不在就返回false
            if (!count.contains(temp1) || !count.contains(temp2)) {
                return false;
            }
        }
        return true;
    }
}

测试的数据长度最长是 100 ,两次循环时间复杂度是O(n2),空间复杂度O(1)

举报

相关推荐

0 条评论