2017-10-09 47 views
0
import java.io.*; 
import java.util.*; 
import java.text.*; 
import java.math.*; 
import java.util.regex.*; 

public class Solution { 

    public static String getSmallestAndLargest(String s, int k) { 
     String smallest = s.substring(0,k); 
     String largest = s.substring(0,k); 
     for(int i=0;i<s.length()-k;i++){ 


      String curr = s.substring(i, i + k); 
      if (smallest.compareTo(curr) > 0){ 
       smallest = curr; 
      } 
      if (largest.compareTo(curr) < 0) { 
       largest = curr; 
      } 
     } 


     return smallest + "\n" + largest; 
    } 

    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     String s = scan.nextLine(); 
     int k = scan.nextInt(); 
     scan.close(); 

     System.out.println(getSmallestAndLargest(s, k)); 
    } 
} 

代碼應該返回字典順序最小和最大的子字符串,但它看起來像我錯了某處,我無法識別。hackerrank-java子串比較錯誤

輸入(stdin):

welcometojava 
3 

你的輸出(stdout):

com 
wel 

預期輸出:

ava 
wel 

回答

0

這是因爲這個循環:

for(int i=0;i<s.length()-k;i++){ 

看不到最後三個字母 - 你停在j,而不是a。你可以簡單地通過調試或者考慮終止條件來找到它。您需要:

for (int i = 0; i < s.length() - k + 1; i++) {