0
点赞
收藏
分享

微信扫一扫

最长美好子串

在这里插入图片描述

 public String test(String s){
        String axt="";

        for(int i=0;i<s.length();i++){
            for(int j=i+1;j<s.length();j++){
                if(check(s.substring(i,j+1))&&(j - i + 1) > axt.length()){ //筛选出最大的子串
                    axt=s.substring(i,j+1);
                }
            }
        }
        return axt;
    }

    public boolean check(String s){
        Set<Character> set= new HashSet<>();

        for(char a:s.toCharArray()){
            set.add(a);
        }
        for(char a:s.toCharArray()){
            char b=Character.toLowerCase(a);
            char c=Character.toUpperCase(a);

            if(!set.contains(b) || !set.contains(c)){
                return false;
            }
        }
        return true;

    }

将原问题拆解成子问题,如果某个字符在当前字符串中没有它对应的大写或小写字符,它必不能构成答案中的一部分,答案只能在它左边或在它右边。
我们返回该点左边或右边更长的答案即为答案。
如果不存在这样的字符,说明原字符串本身就是美好字符串。

class Solution {
    public String longestNiceSubstring(String s) {
        if(s.length() < 2)
            return "";
        for(int i = 0; i < s.length(); i++){
            char c = s.charAt(i);
            //确定没有对应大小写的字符位置
            if((c <= 'Z' && !s.contains(String.valueOf((char)((int)c + 32)))) || (c >= 'a' && !s.contains(String.valueOf((char)((int)c - 32))))){ 
                String s1 = longestNiceSubstring(s.substring(0, i)), s2 = longestNiceSubstring(s.substring(i+1));
                if(s1.length() >= s2.length())
                    return s1;
                return s2;
            }
        }
        return s;
    }
}
举报

相关推荐

0 条评论