import java.util.*;
class VowelAsc
{
public static void main(String args[])
{
int count=0;
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
String [] s=new String[n];
int [] b=new int[40];
for(int i=0;i<n;i++)
{
s[i]=sc.next();
}
for(int i=0;i<s.length;i++)
{
char[] a=s[i].toCharArray();
for(int c=0;c<a.length;c++)
{
if(a[c]=='a' || a[c]=='e' || a[c]=='i' || a[c]=='o' || a[c]=='u' ||a[c]=='A' ||a[c]=='E' || a[c]=='I' || a[c]=='O' || a[c]=='U')
{
count++;
//b[c]=count;
}
}
if(count>0)
{
if(i<s.length)
{
String t=s[i];
s[i]=s[i+1];
s[i+1]=t;
}
}
}
}
}
我试图计算每个字符串中的元音,我想根据count变量交换字符串,但我做不到。在接受字符串后,我用toCharArray()函数将其转换为char数组,并将每个字符与小写和大写元音进行比较。
我收到一个错误。编写代码部分的任何帮助都将不胜感激。
输入:
n=4
xyz
bad
aeiou
hello
输出:
aeiou
hello
bad
xyz
与mumpitz代码类似,但针对性能进行了优化:
class Comp implements Comparator<String> {
private static boolean[] isVowel = new boolean[127];
static {
isVowel['a'] = true;
isVowel['e'] = true;
isVowel['i'] = true;
isVowel['o'] = true;
isVowel['u'] = true;
}
@Override
public int compare(String o1, String o2) {
return count(o1) - count(o2);
}
private int count(String s) {
int cnt = 0;
for (int i=0; i<s.length(); i++) {
char c = s.charAt(i);
if (c < 128 && isVowel(c))
cnt++;
}
}
return cnt;
}
}
String[] s = new String[]{"xyz", "bad", "aeiou", "hello"};
List<String> sList = Arrays.asList(s);
Collections.sort(sList, new Comp());
s = sList.toArray(s);
良好的...这可能有点过分(列表和正则表达式),但是如果你不必执行数百万次,那么通过自定义比较器在列表中对它们进行排序就可以了:
String[] s = new String[]{"xyz", "bad", "aeiou", "hello"};
Arrays.sort(s, new Comparator<String>(){
@Override
public int compare(String o1, String o2) {
return o2.replaceAll("[^aeiouAEIOU]", "").length()
- o1.replaceAll("[^aeiouAEIOU]", "").length();
}
});
编辑:通过删除列表进行优化,谢谢@Holger
我有一个数组: 如何根据数组中每个元素中包含的数字对数组进行排序?
对于类,我需要对文本文件执行多向排序。具体来说,我需要按元音计数,然后按长度组织单词。我的问题在于按元音数量对数组进行排序。 我试图做的是遍历每个单词,并计算该单词的元音。根据元音的数量,它被添加到相应的队列中。 问题是,所有包含元音的单词都被添加到oneVowel队列中,而其余的单词仍然为空。我认为这是因为一旦numVowels增加一次,第一个if语句就会将整个单词添加到第一个队列中。 我该如何
问题内容: 我有一个包含多个数组的数组,我想根据这些数组中的某个字符串对数组进行排序。 如何按名称排序,以便 阿尔伯特排 在首位, 齐默尔曼排 在最后? 我知道如果可以使用整数进行排序,但是字符串使我毫无头绪,该怎么办。 谢谢您帮忙!:) 问题答案: 这可以通过将支持函数作为参数传递给方法调用来实现。 像这样:
问题内容: 我创建了一个sqlite数据库,该数据库具有一个存储温度值的表。第一次将温度值以升序写入数据库。然后,我将数据库中的温度值读取到一个列表中,然后将该列表添加到组合框中以选择温度- 效果很好。 结果列表为: 然后,我向数据库添加一个新的温度值,例如“ 33”。 它被附加到表的末尾。如果我现在阅读温度,列表将变为: 如果我做或,最终的结果是 有什么简单的方法可以按升序对列表进行排序,以便得
问题内容: 我有这样的txt文件中的数据列表 我的任务是按照每个标准对这些数据进行排序,例如)按日期,纬度和经度排序 我尝试像这样的泡沫排序 这可行,但是需要太多时间 那里有在txt文件数据 有没有其他方法可以对这些数据进行排序? 问题答案: 我可能会破坏一些学生的家庭作业,但是这里… 正如课题所建议的那样,Java的自然方法是创建一个表示您的数据的类。然后实现一个将传递给实用方法的方法。 在运行
在我看来最好的情况应该是O(log n),但不确定最坏的情况...也许O(n^2)一次只能匹配一个字母。 谁能给我更多的点子吗?