题目
1763.最长的美好子字符串
题目大意
当一个字符串 s
包含的每一种字母的大写和小写形式 同时 出现在 s
中,就称这个字符串 s
是 美好 字符串。比方说,"abABB"
是美好字符串,因为 'A'
和 'a'
同时出现了,且 'B'
和 'b'
也同时出现了。然而,"abA"
不是美好字符串因为 'b'
出现了,而 'B'
没有出现。
给你一个字符串 s
,请你返回 s
最长的 美好子字符串 。如果有多个答案,请你返回 最早 出现的一个。如果不存在美好子字符串,请你返回一个空字符串。
样例
数据规模
思路
思路比较暴力:直接枚举子串,即左端点
l
l
l和右端点
r
r
r,然后遍历该子串,对相应的字符进行标记,然后判断26个字母是否出现的字母都是大小写同时出现,即一旦出现vis[(int)(k-'a'+'A')]+vis[(int)k]==1
,那么该子串就是不符合要求的。然后更新答案,选择最长的符合要求的子串。
代码
class Solution
public:
string longestNiceSubstring(string s) {
int n=s.length();
int maxx=0;string ans;
int vis[150];
for(int l=0;l<n;l++){
for(int r=l;r<n;r++){
memset(vis,0,sizeof(vis));
for(int k=l;k<=r;k++){
vis[(int)s[k]]=1;
}
int sign=0;
for(char k='a';k<='z';k++){
if(vis[(int)(k-'a'+'A')]+vis[(int)k]==1){
sign=1;
}
}
if(!sign&&maxx<r-l+1){
maxx=r-l+1;
ans=s.substr(l,r-l+1);
}
}
}
return ans;
}
};