Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.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 这里有“字符串”;“naveen”,希望输出为;eennav“;_Java_String - Fatal编程技术网

Java 这里有“字符串”;“naveen”,希望输出为;eennav“;

Java 这里有“字符串”;“naveen”,希望输出为;eennav“;,java,string,Java,String,我有java“naveen”中的字符串,我希望输出为“eennav”。请帮我解决这个问题。其思想是字符按频率顺序排列,如果频率相同,则按字母顺序排列 谢谢 我试图在字符串中找到重复项,但无法获得所需的输出 String str="naveen"; int count =0; char[] charr=str.toCharArray(); for(int i=0;i<charr.length;i++) { //System.out.printl

我有java“naveen”中的字符串,我希望输出为“eennav”。请帮我解决这个问题。其思想是字符按频率顺序排列,如果频率相同,则按字母顺序排列

谢谢

我试图在字符串中找到重复项,但无法获得所需的输出

    String str="naveen";
    int count =0;
    char[] charr=str.toCharArray();
    for(int i=0;i<charr.length;i++) {
        //System.out.println(s[i]);
        for(int j=i+1;j<charr.length;j++) {
            if(charr[i]==(charr[j])) {
            System.out.println(charr[i]);
            }
String str=“naveen”;
整数计数=0;
char[]charr=str.toCharArray();

对于(int i=0;i假设问题要求我们获取一个只包含小写字母的字符串,并按字母频率(从高到低)对其进行组织,在该频率范围内按字母顺序进行组织,我们可以如下所示。 策略是首先遍历输入字符串的字符并计算每个字符的出现次数。然后我们查看字母的出现次数并找到最大的。从最大到1,我们遍历出现次数最多的字符的字母表,并将其中的许多字符附加到结果字符串中。 这里需要做一点工作,将“a”来回转换为0,将“0”转换为“a”,然后依次转换为25和“z”。 这种方法可以扩展,但由于问题没有具体说明,我选择了简化假设。我也没有进行优化,只是让它发挥作用

public class MyClass {
public static void main(String args[]) {
    String str = "naveen"; //this string may change, but it is assumed to be all lower case letters by this implementation
    int[] counts = new int[26]; //frequency count of letters a to z
    for (int i = 0; i < 26; i++) {
        counts[i] = 0; // intially 0 of any letter
    }
    char[] charr = str.toCharArray();
    for (int i = 0; i < charr.length; i++) {
        counts[(int)(charr[i]) - (int)('a')]++; // increment corresponding spot in counts array, spot 0 for 'a' through 25 for 'z'
    }
    int maxCount = counts[0]; // now find the most occurrences of any letter
    for (int i = 1; i < counts.length; i++) {
        if (counts[i] > maxCount) {
            maxCount = counts[i];
        }
    }
    String result = ""; // string to return
    for (int j = maxCount; j > 0; j--) { // work down from most frequently occuring, within that alphabetically
        for (int i = 0; i < 26; i++) {
            if (counts[i] == j) {
                //System.out.println("there are "+j+" of the letter "+(char)((int)('a'+i)));
                for (int k = 0; k < j; k++) {
                    result = result + (char)((int)('a' + i));
                }
            };
        }
    }
    System.out.println(result);
    }
}
公共类MyClass{
公共静态void main(字符串参数[]){
String str=“naveen”//此字符串可能会更改,但此实现假定它是所有小写字母
int[]计数=新的int[26];//字母a到z的频率计数
对于(int i=0;i<26;i++){
计数[i]=0;//任何字母的初始值为0
}
char[]charr=str.toCharArray();
for(int i=0;i最大计数){
最大计数=计数[i];
}
}
String result=“;//要返回的字符串
对于(int j=maxCount;j>0;j--){//从最常出现的开始,按字母顺序向下计算
对于(int i=0;i<26;i++){
如果(计数[i]==j){
//System.out.println(“字母“+(char)((int)('a'+i))中有“+j+”);
对于(int k=0;k
请解释你如何从一个词到另一个词的规则……是先按出现频率再按字母表排列字符的想法吗?@JeremyKahan……它也可以左移三次?
naveen
aveenn
veenna
eennav
如果(str.equals(“naveen”))System.out.println(“eennav”);else抛出新的IllegalArgumentException(“转换的一般规则未知”)
问题主要不在于重复。首先要建立一个频率表,并从高频率到低频率进行迭代。太好了。如果问题被搁置时允许,请随时接受答案。我希望我没有给你比你想要的更多。一个练习可以是扩展它以处理资本字母或者其他字符——让它成为你自己的。肯定还有其他可能的方法,比如先对字符进行排序。奇怪的是,由于不清楚,所以它被搁置了,因为有很多人确实理解了这个问题。