按字典顺序排列第k个字符串中的最小字符

时间:2015-07-10 18:50:50

标签: 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 = ss.iterator();
    int i=0;
      while (it.hasNext()) {
         Object element = it.next();
         if(i==K-1)
             return (Character) element;

      }
      return null;
}

1 个答案:

答案 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()返回的值。