一个数据流进来,每次一个字母,当前数据流的排列是否能组成回文串。
样例
样例 1:
输入:s = ['a','a','a','a','a']
输出:[1,1,1,1,1]
解释:
“a”的排列可以构成回文串
“aa”的排列可以构成回文串
“aaa”的排列可以构成回文串
“aaaa”的排列可以构成回文串
“aaaaa”的排列可以构成回文串
样例 2:
输入:s = ['a','b','a']
输出:[1,0,1]
解释:
“a”的排列可以构成回文串
“ab”的排列不可以构成回文串
“aba”的排列可以构成回文串
注意事项
1 <= |s| <= 10^5
解题思路:
当且仅当出现次数为奇数的字符个数为0或1时可以构成回文串
public class Solution {
/**
* @param s: The data stream
* @return: Return the judgement stream
*/
public int[] getStream(String s) {
// Write your code here
int[] res = new int[s.length()];
char[] ss = s.toCharArray();
for(int i=0; i<ss.length; i++){
int[] characters = new int[26]; //用于存储26个字母出现的次数
for(int j=0; j<=i; j++)
characters[ss[j] - 'a']++;
int oddNums = 0;
for(int k=0; k<characters.length; k++)
if(characters[k] % 2 == 1) //统计出现奇数次的字母个数
oddNums++;
//如奇数次字母数大于1则不能组成回文串
if(oddNums > 1)
res[i] = 0;
else
res[i] = 1;
}
return res;
}
}