首页 > 其他分享 >1763. 最长的美好子字符串 暴力枚举

1763. 最长的美好子字符串 暴力枚举

时间:2022-12-25 22:25:03浏览次数:34  
标签:string int longestNiceSubstr 枚举 美好 字符串 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 只包含大写和小写英文字母。

因为字符串并不是很长,总规模不会很大,枚举所有以不同位置的字符开始的子字符串是否是美好字符串,选取最长的那一个

class Solution { public:     bool compare2case(int *arr1,int *arr2,int len){   //比较大小写字母序为下标的数组是否相等         for(int i = 0;i < len;i++){             if (*arr1++ != *arr2++) return false;         }         return true;     }     string longestNiceSubstring(string s) {  //算法思想,暴力枚举,枚举出以所有位置开头的字符串是否是美好字符串,一个位置开头的美好字符串一定有最长的。如果他是最长的,一定是全局最长,因为位置是从左往后枚举,所以也肯定是首先出现的。         string longestNiceSubstr;         int longestNicelegth = 0;         for(int i = 0;i < s.size();i++){             int lowercase[26] = {0};   //使用整数的不同二进制位来保存该字符是否在字符串中出现过             int uppercase[26] = {0};             if(s[i]-'A' <= 26){// 起始字符是大写字符                 uppercase[s[i]-'A']=1;   //是第几个大写字母,就把uppercase 中第几个位置上的位域置1             }else{                 lowercase[s[i]-'a']=1;             }                 //枚举以i开始的,j结束的子字符串             for(int j = i+1;j < s.size();j++){                 if(s[j] - 'A' <= 26 ){                     uppercase[s[j]-'A']=1;                 }else{                     lowercase[s[j]-'a']=1;                 }                 //每次多增加一个字母,查看一下该子串是不是美好字符串                 if(compare2case(uppercase,lowercase,26)){                     if(j-i + 1 > longestNicelegth){                         longestNicelegth = j - i + 1;                         longestNiceSubstr = s.substr(i,j-i+1);                     }                     //是美好字符串,但是不是最长的,忽略                 }             }         }         return longestNiceSubstr;     } };   判断一个字符串 是否 大小写的字母都有,除了上面的这种用两个字母数组来确定之外,还可以使用26个二进制位来唯一确定,那一个字母存在,那么对应的二进制位就是1,如果不存在就是0 这样判断一个字符串是否大小写都存在就更快一些了,不过用两个字母数组来确定会更通用一些。
class Solution {
public:
    string longestNiceSubstring(string s) {
        string longestNiceSubstr;
        int longestNicelegth = 0;
        for(int i = 0;i < s.size();i++){
            int lowercase = 0;   //使用整数的不同二进制位来保存该字符是否在字符串中出现过
            int uppercase = 0;
            if(s[i]-'A' <= 26){// 起始字符是大写字符
                uppercase |= (1<<(s[i]-'A'));   //是第几个大写字母,就把uppercase 中第几个位置上的位域置1
            }else{
                lowercase |= (1<<(s[i]-'a'));
            }    
            //枚举以i开始的,j结束的子字符串
            for(int j = i+1;j < s.size();j++){
                if(s[j] - 'A' <= 26 ){
                    uppercase |= (1<<(s[j]-'A'));
                }else{
                    lowercase |= (1<<(s[j]-'a'));
                }
                //每次多增加一个字母,查看一下该子串是不是美好字符串
                if(uppercase == lowercase){
                    if(j-i + 1 > longestNicelegth){
                        longestNicelegth = j - i + 1;
                        longestNiceSubstr = s.substr(i,j-i+1);
                    }
                    //是美好字符串,但是不是最长的,忽略
                }
            }
        }
        return longestNiceSubstr;
    }
};
 

标签:string,int,longestNiceSubstr,枚举,美好,字符串,1763,最长
From: https://www.cnblogs.com/daniel123/p/17004741.html

相关文章

  • 57. 回文字符串——递归
    57.回文字符串——递归   有一种特殊形式的字符串,其正反序相同,被称为“回文字符串”。例如LeveL就是一个回文字符串。输入:        字符串输出:   ......
  • 力扣---1768. 交替合并字符串
    给你两个字符串word1和word2。请你从word1开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。返回合......
  • 5个JavaScript的字符串处理库
    英文| ​​https://blog.bitsrc.io/5-string-manipulation-libraries-for-javascript-5de27e48ee62​​​使用字符串可能是一项繁琐的任务,因为有许多不同的用例。例如,将字......
  • python之路55 cookie与session 操作 把模块变成字符串进行导入
    django中间件三个了解的方法1.process_view 路由匹配成功之后执行视图函数/类之前自动触发(顺序同process_request)2.process_exception 视图函数/类执行报错自动触发(......
  • cf1763 —F. Edge Queries
    F.EdgeQuerieshttps://codeforces.ml/contest/1763/problem/F题意n个点m条边的无向图,保证一个点不会存在多个连通分量中,q次询问,问对于从u到v的所有路径上的边,删掉一条......
  • Script-字符串-2022-12-24
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><script>//<!--采用严格检查模式usestrict放在第一行//let定义......
  • 简单字符串
    这波乱搞新年发博客?不存在,只是开个坑所以这篇文章干屁用是\(hash\),\(kmp\),\(trie\)树,\(AC\)自动机的学习笔记好吧,我基本是深夜更新话不多说,我们就进入鬼畜奇妙的......
  • "==" 与 equals 比较字符串对象
    "=="与equals在字符串比较中的不同"=="比较的是字符串的地址值,是不是同一份内存空间的地址(相同引用)equals比较的是字符串的内容,同一个内存空间地址里值(相同内......
  • Java字符串
    提取字符串的某个位置用charAt();提取字符串的长度length();判断大写字母,小写字母和数字个数大写   >='A'&&<='Z'小写   >='a'&&<='z'数字   >='0'&......
  • 字符串处理函数 相关函数: strstr
    相关函数:strstr头文件 :#include<string.h>函数原型:char*strstr(constchar*haystack, constchar*needle);函数说明:在字符串haystack中查找字符串needle......