Every day a Leetcode
题目来源:1763. 最长的美好子字符串
解法1:枚举
枚举所有可能的子字符串,然后用 isBeautiful函数检测该字符串是否为美好的字符串,并得到长度最长的美好字符串。
代码:
/*
* @lc app=leetcode.cn id=1763 lang=cpp
*
* [1763] 最长的美好子字符串
*/
// @lc code=start
class Solution
{
private:
bool isBeautiful(string &str)
{
vector<int> lowerAlpha(26, 0), upperAlpha(26, 0);
for (char &c : str)
{
if (islower(c))
lowerAlpha[c - 'a'] = 1;
else
upperAlpha[c - 'A'] = 1;
}
for (int i = 0; i < 26; i++)
if (lowerAlpha[i] ^ upperAlpha[i])
return false;
return true;
}
public:
string longestNiceSubstring(string s)
{
int n = s.size();
string ans = "";
for (int i = 0; i < n; i++)
for (int len = 1; len <= n - i; len++)
{
string temp = s.substr(i, len);
if (isBeautiful(temp) && temp.size() > ans.size())
ans = temp;
}
return ans;
}
};
// @lc code=end
结果:
复杂度分析:
时间复杂度:O(n2),其中 n 为字符串的长度。需要枚举所有可能的子字符串,因此需要双重循环遍历字符串,总共可能有 n2 个连续的子字符串。
空间复杂度:O(n)。其中 n 为字符串的长度。