2015-07-10 82 views
1

我有一個由用戶輸入的字符串和一個整數k。如何從輸入字符串中得到字典中第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

在'str'中創建一組有序的所有字符。其餘的應該是顯而易見的。 – Paul

+0

一些代碼?或尋找作業? –

+0

我對此很陌生。如果有人能幫助我完成同樣的功能,那將會很棒。 – g19

回答

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

相關問題