2017-10-09 17 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++){ 

最後の3文字は表示されません。ではなく、jに止まります。デバッグや終了条件について考えるだけで簡単に見つけることができます。必要なもの:

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