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;
}
}