查找字符串中的子序列

我一直在解决这组关于黑客排名的挑战,链接:字符串中的黑客排名

我想出了我的算法,它是这样的:

  1. 根据黑客排名字符串检查它是否至少有两个a,r和k

  2. 检查它是否包含以下字符 h, a, c, k, e, r, n, k

  3. 设 p[0], p(1), p[2]....,p[9] 是字符串中 h, a, c, k, e, r, r, a, n, k 的相应索引。如果 p[0] < p(1) < p[2] < ....< p[9] 是真的,则包含黑客排名。

我知道这是非常糟糕的,并且由于此错误,输出也没有出现:Terminated due to timeout

法典:

我有一个名为的方法,它返回“YES”或“NO”字符串hackerrankInString(String s)

// Complete the hackerrankInString function below.

static String hackerrankInString(String s) {

  int countR = 0, countA = 0, countK = 0;

  //for reading multi-line inputs, it will perform operation individually 

  // on the inputs

  while(scanner.hasNextLine()){

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

      if(s.charAt(i) == 'r')

        countR++;


      if(s.charAt(i) == 'a')

        countA++;


      if(s.charAt(i) == 'k')

        countK++;

    }

    }


    return "NO";

}

请帮帮我这个,我想学两个傻瓜,

  • 如何解决这一挑战

  • 如何有效地解决我的第三个算法语句

任何帮助将不胜感激。


杨魅力
浏览 121回答 2
2回答

潇潇雨雨

您可以使用正则表达式来解决问题:static String hackerrankInString(String input) {&nbsp; &nbsp; final String regexHack = ".*h.*a.*c.*k.*e.*r.*r.*a.*n.*k.*";&nbsp; &nbsp; return input.matches(regexHack) ? "YES" : "NO";}使用 调用它:System.out.println(hackerrankInString("hhaacckkekraraannk"));&nbsp; // YESSystem.out.println(hackerrankInString("hackerworld"));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// NO您可以在此处试用正则表达式。

神不在的星期二

没有太多时间检查,但可以看起来像那样public static String solve(String startWord, String givenWord) {&nbsp; &nbsp; for(int i = 0; i < startWord.length(); i++) {&nbsp; &nbsp; &nbsp; &nbsp; String letter = startWord.substring(i, i + 1);&nbsp; &nbsp; &nbsp; &nbsp; int index = givenWord.indexOf(letter);&nbsp; &nbsp; &nbsp; &nbsp; if(index == -1) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return "NO";&nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; givenWord = givenWord.substring(index + 1, givenWord.length());&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return "YES";}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java