跳到主要内容

1763.最长的美好子字符串

链接:1763.最长的美好子字符串
难度:Easy
标签:位运算、哈希表、字符串、分治、滑动窗口
简介:给你一个字符串 s ,请你返回 s 最长的 美好子字符串 。如果有多个答案,请你返回 最早 出现的一个。如果不存在美好子字符串,请你返回一个空字符串。

题解 1 - cpp

  • 编辑时间:2022-02-01
  • 执行用时:8ms
  • 内存消耗:6.1MB
  • 编程语言:cpp
  • 解法介绍:遍历所有起点和终点。
class Solution {
public:
int arr[256];
int check(string &str, int start, int end) {
memset(arr, 0, sizeof(int) * 256);
for (int i = start; i <= end; i++) {
arr[str[i]] = 1;
}
for (int i = 'A'; i <= 'Z'; i++) {
if (arr[i] && !arr[i + 32]) return 0;
}
for (int i = 'a'; i <= 'z'; i++) {
if (arr[i] && !arr[i - 32]) return 0;
}
return 1;
}
string longestNiceSubstring(string s) {
string ans = "";
for (int i = 0; i < s.size(); i++) {
for (int j = 0; j < i; j++) {
if (check(s, j, i) && i - j + 1 > ans.size())
ans = s.substr(j, i - j + 1);
}
}
return ans;
}
};

题解 2 - cpp

  • 编辑时间:2022-02-01
  • 执行用时:12ms
  • 内存消耗:6MB
  • 编程语言:cpp
  • 解法介绍:遍历所有起点和终点。
class Solution {
public:
int arr[26];
int check(string &str, int start, int end) {
memset(arr, 0, sizeof(int) * 26);
for (int i = start; i <= end; i++) {
if (str[i] >= 'a')
arr[str[i] - 'a'] |= 0b10;
else
arr[str[i] - 'A'] |= 0b01;
}
for (int i = 0; i < 26; i++) {
if (arr[i] != 0 && arr[i] != 3) return 0;
}
return 1;
}
string longestNiceSubstring(string s) {
string ans = "";
for (int i = 0; i < s.size(); i++) {
for (int j = 0; j < i; j++) {
if (check(s, j, i) && i - j + 1 > ans.size())
ans = s.substr(j, i - j + 1);
}
}
return ans;
}
};