找出最长的超赞子字符串Java
文章发布较早,内容可能过时,阅读注意甄别。
# 题目
给你一个字符串 s 。请返回 s 中最长的 超赞子字符串 的长度。
「超赞子字符串」需满足满足下述两个条件:
- 该字符串是 s 的一个非空子字符串
- 进行任意次数的字符交换后,该字符串可以变成一个回文字符串
示例 1:
输入:s = "3242415"
输出:5
解释:"24241" 是最长的超赞子字符串,交换其中的字符后,可以得到回文 "24142"
示例 2:
输入:s = "12345678"
输出:1
示例 3:
输入:s = "213123"
输出:6
解释:"213123" 是最长的超赞子字符串,交换其中的字符后,可以得到回文 "231132"
示例 4:
输入:s = "00"
输出:2
提示:
- 1 <= s.length <= 10^5
- s 仅由数字组成
# 思路
Arrays.fill
# 解法
class Solution {
public int longestAwesome(String s) {
int min[]=new int[1024];
Arrays.fill(min,s.length()+5);
min[0]=0;
int ans=0,mask=0;
for(int i=1;i<=s.length();i++){
mask^=(1<<(s.charAt(i-1)-'0'));
ans=Math.max(ans,i-min[mask]);
if(min[mask]>s.length()){min[mask]=i;}
for(int j=0;j<10;j++){ans=Math.max(ans,i-min[mask^(1<<j)]);}
}
return ans;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 总结
- 分析出几种情况,然后分别对各个情况实现


