为了账号安全,请及时绑定邮箱和手机立即绑定

查找字符串中的子序列

查找字符串中的子序列

杨魅力 2022-09-22 15:59:20

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

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

  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";

}

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

  • 如何解决这一挑战

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

任何帮助将不胜感激。


查看完整描述

2 回答

?
潇潇雨雨

TA贡献1519条经验 获得超3个赞

您可以使用正则表达式来解决问题:


static String hackerrankInString(String input) {

    final String regexHack = ".*h.*a.*c.*k.*e.*r.*r.*a.*n.*k.*";

    return input.matches(regexHack) ? "YES" : "NO";

}

使用 调用它:


System.out.println(hackerrankInString("hhaacckkekraraannk"));  // YES

System.out.println(hackerrankInString("hackerworld"));         // NO

您可以在此处试用正则表达式。


查看完整回答
反对 回复 2022-09-22
?
神不在的星期二

TA贡献1632条经验 获得超6个赞

没有太多时间检查,但可以看起来像那样


public static String solve(String startWord, String givenWord) {

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

        String letter = startWord.substring(i, i + 1);

        int index = givenWord.indexOf(letter);

        if(index == -1) {

            return "NO";

        } else {

            givenWord = givenWord.substring(index + 1, givenWord.length());

        }

    }


    return "YES";

}


查看完整回答
反对 回复 2022-09-22

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信