1763 最长的美好子字符串

题目描述:
当一个字符串 s 包含的每一种字母的大写和小写形式 同时 出现在 s 中,就称这个字符串 s 是 美好 字符串。比方说,“abABB” 是美好字符串,因为 ‘A’ 和 ‘a’ 同时出现了,且 ‘B’ 和 ‘b’ 也同时出现了。然而,“abA” 不是美好字符串因为 ‘b’ 出现了,而 ‘B’ 没有出现。
给你一个字符串 s ,请你返回 s 最长的 美好子字符串 。如果有多个答案,请你返回 最早 出现的一个。如果不存在美好子字符串,请你返回一个空字符串。

示例 1:
输入:s = “YazaAay”
输出:“aAa”
解释:“aAa” 是一个美好字符串,因为这个子串中仅含一种字母,其小写形式 ‘a’ 和大写形式 ‘A’ 也同时出现了。
“aAa” 是最长的美好子字符串。

示例 2:
输入:s = “Bb”
输出:“Bb”
解释:“Bb” 是美好字符串,因为 ‘B’ 和 ‘b’ 都出现了。整个字符串也是原字符串的子字符串。

示例 3:
输入:s = “c”
输出:""
解释:没有美好子字符串。

示例 4:
输入:s = “dDzeE”
输出:“dD”
解释:“dD” 和 “eE” 都是最长美好子字符串。
由于有多个美好子字符串,返回 “dD” ,因为它出现得最早。

提示:
1 <= s.length <= 100
s 只包含大写和小写英文字母。

方法1:
主要思路:解题链接汇总
(1)从最长的可能长度开始,找出第一个符合要求的字符串,直接返回结果;

class Solution {
public:bool get_res(string&str,string&res,int k){//找出给定长度的符合要求的字符串vector<int> small(26,0);vector<int> big(26,0);for(int i=0;i<k-1;++i){if(str[i]>='a'&&str[i]<='z'){small[str[i]-'a']++;}else{big[str[i]-'A']++;}}int left=0;int right=k-1;while(right<str.size()){if(str[right]>='a'&&str[right]<='z'){small[str[right]-'a']++;}else{big[str[right]-'A']++;}bool sign=true;for(int i=0;i<26;i++){if((small[i]>0&&big[i]==0)||(small[i]==0&&big[i]>0)){sign=false;break;}}if(sign){//找出符合要求的字符串res=str.substr(left,k);return true;}if(str[left]>='a'&&str[left]<='z'){small[str[left]-'a']--;}else{big[str[left]-'A']--;}++left;++right;}return false;}string longestNiceSubstring(string s) {string res;int k=s.size();while(k!=1){if(get_res(s,res,k)){//若是当前长度的找到,直接跳出循环返回break;}--k;}return res;}
};

//go语言实现

func get_res(str *string,res *string,k int) bool {var small [26]intvar big [26]intfor i:=0;i<k-1;i++ {if((*str)[i]>='a'&&(*str)[i]<='z'){small[(*str)[i]-'a']++}else {big[(*str)[i]-'A']++}}left :=0right :=k-1for right<len(*str) {if((*str)[right]>='a'&&(*str)[right]<='z'){small[(*str)[right]-'a']++}else {big[(*str)[right]-'A']++}sign := truefor i:=0;i<26;i++ {if((small[i]>0&&big[i]==0)||(small[i]==0&&big[i]>0)){sign=false;break;}}if(sign){(*res)=(*str)[left:right+1]return true}if((*str)[left]>='a'&&(*str)[left]<='z'){small[(*str)[left]-'a']--}else {big[(*str)[left]-'A']--}right++left++}return false
}
func longestNiceSubstring(s string) string {res:=""k:=len(s)for k!=1 {if(get_res(&s,&res,k)){break}k--;}return res
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部