Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 给定一个字符串,确定该字符串的排列是否可以形成回文_Java_Data Structures - Fatal编程技术网

Java 给定一个字符串,确定该字符串的排列是否可以形成回文

Java 给定一个字符串,确定该字符串的排列是否可以形成回文,java,data-structures,Java,Data Structures,我正在Leetcode上解决这个问题,我已经看到了一个解决方案,但是我在理解解决方案中使用的一些语法时遇到了困难。如果有人能给我解释一下,我会非常感激的 问题: 解决方案: class Solution { public boolean canPermutePalindrome(String s) { int count=0; int[]arr=new int[128]; for(int i=0;i<s.lengt

我正在Leetcode上解决这个问题,我已经看到了一个解决方案,但是我在理解解决方案中使用的一些语法时遇到了困难。如果有人能给我解释一下,我会非常感激的

问题:

解决方案:

class Solution {
    public boolean canPermutePalindrome(String s) {
        
        int count=0;
        int[]arr=new int[128];
        for(int i=0;i<s.length();i++){
            arr[s.charAt(i)]++;
       
        if(arr[s.charAt(i)]%2==0)
            count--;
        
        else 
            count++;
    
        }
        return count <=1;
    }
}
我的问题是:

我见过其他类似的问题,初始化大小为128或256的数组。在这样的问题中,为什么要使用128或256作为数组大小?有什么特别的原因吗

arr[s.charAti]++; 在这样的问题中,为什么要使用128或256作为数组大小?这用于字符实例计数。字符应在0-127或0-255之间 arr[s.charAti]++; 根据字符集是ascii还是扩展ascii,数组长度取128或256。请参阅 arr[s.charAti]++表示字符增量。在Java中,char是一种数字类型。将1添加到字符时,将进入下一个unicode代码点。 arr[s.charAti]++转换为: arr[s.charAti]=arr[s.charAti]+1; 试试这个

它对字符进行频率计数。 然后计算具有奇数频率的字符数。 如果有多组字符出现奇数次,则 无法重新排列为回文。
请不要在链接中发布您的问题未订阅Premiumy链接无法访问您不是在说明您的问题,而是提供一个指向需要帐户登录的站点的链接。对不起,我没有意识到这是一个高级问题:问题:给定一个字符串,确定字符串的排列是否可以形成回文。示例1:Input:code Output:false示例2:Input:aab Output:true示例3:Input:carerac Output:TrueThank..让我们假设一个字符串aab和相同字符串的数组{a,a,b}。。。arr[s.charAt1]++转换为arr[a]+1,即arr[b]?因为a在索引1处,如果我们加上1,我们得到索引2处的b?arr[s.charAti]++只是增加该位置的值。假设字符串是aab,i=0。s、 charAti=s.charAt0=a;arr[s.charAt0]=arr[a]将是arr[97],因为ascii是ascii表中的is 97。所以语句被翻译成arr[97]=arr[97]+1。因此,总的来说,第97指数的值将增加1,以此类推
public static boolean isConvertable(String a) {
    long count = Arrays.stream(a.split(""))
            .collect(Collectors.groupingBy(str -> str,
                    Collectors.counting()))
            .values().stream().filter(val -> (val % 2) == 1)
            .count();
    
    return count <= 1;
}