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)