Java 按字典顺序排列,是字符串中的第k个最小字符
我有一个由用户输入的字符串和一个整数k。如何从输入字符串中获取按字典顺序排列的第k个最小字符 这就是我一直在尝试的Java 按字典顺序排列,是字符串中的第k个最小字符,java,string,Java,String,我有一个由用户输入的字符串和一个整数k。如何从输入字符串中获取按字典顺序排列的第k个最小字符 这就是我一直在尝试的 static Character find(int K, String s){ SortedSet<Character> ss = new TreeSet<Character>(); for(Character c : s.toCharArray()){ ss.add(c); } Iterator it = s
static Character find(int K, String s){
SortedSet<Character> ss = new TreeSet<Character>();
for(Character c : s.toCharArray()){
ss.add(c);
}
Iterator it = ss.iterator();
int i=0;
while (it.hasNext()) {
Object element = it.next();
if(i==K-1)
return (Character) element;
}
return null;
}
静态字符查找(int K,字符串s){
SortedSet ss=新树集();
for(字符c:s.toCharArray()){
ss.添加(c);
}
迭代器it=ss.Iterator();
int i=0;
while(it.hasNext()){
Object元素=it.next();
如果(i==K-1)
返回(字符)元素;
}
返回null;
}
您的代码是正常的,除了一件事:i
变量的处理。您应该在while
循环的末尾增加它,以使其与K-1
匹配
还有一种对java8更友好的方法:
String str = "hello";
int k = 2;
Optional<Character> kth =
Stream.of(str.split(""))
.map(c -> c.charAt(0))
.sorted()
.distinct()
.skip(k - 1)
.findFirst();
System.out.println(kth.isPresent() ? kth.get() : "k too big!"); // h
String str=“你好”;
int k=2;
可选kth=
第三流(str.split(“”)
.map(c->c.charAt(0))
.已排序()
.distinct()
.skip(k-1)
.findFirst();
System.out.println(kth.isPresent()?kth.get():“k太大了!”;//H
此代码假定k
是基于1的,并且在获取第k个字符时不考虑重复字符
此外,正如注释中指出的,您不应该对
迭代器使用原始类型。考虑将其更改为<代码> Iterator <代码>,这样您就不必抛出由<代码> .NeXT()/<代码>返回的值。< /p>在 STR 中,生成所有字符的排序集。剩下的应该是显而易见的。一些代码?还是在找作业?我对这个很陌生。如果有人能帮我实现同样的功能,那就太好了。@g19太好了,欢迎光临!如果您向我们展示一些您尝试过的代码,以及您认为应该如何使其工作,那就更好了……我认为您需要更改的是if(I==K-1)
到if(I++==K-1)