我有一个用户输入的字符串和一个整数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 = ss.iterator();
int i=0;
while (it.hasNext()) {
Object element = it.next();
if(i==K-1)
return (Character) element;
}
return null;
}
答案 0 :(得分:1)
您的代码没问题,除了一件事:处理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
此代码假定k
是基于1的,并且您没有考虑重复项来获取第k个字符。
此外,正如评论中指出的那样,您不应该为Iterator
使用原始类型。请考虑将其更改为Iterator<Character>
,因此您无需转换it.next()
返回的值。