【问题标题】:Determine whether string2 occurs with string1 or not判断 string2 是否与 string1 一起出现
【发布时间】:2015-11-13 15:11:28
【问题描述】:

给定两个字符串str1str2 作为输入,我需要确定str2 是否出现在str1 中。

例子:

  • 输入#1:occurs("JavaLadders","Java")
  • 输出#1:true
  • 输入#2:occurs("Problem Panel","Panes")
  • 输出#2:false

在我的函数中,我使用了 2 个字符串。在 for 循环中,我正在检查每个字符位置,str1 中的该字符是否与str2 中的匹配。如果不匹配,我制作了p=0count=0。如果匹配,我会增加我的countp

我还检查了count 是否等于我的str2.length()。如果是,我退出循环并返回true,否则我返回false

public boolean occurs(String str1, String str2)
{
    int l1=str1.length();
    int l2=str2.length();
    int p=0;
    int count=0;
    int j=0;
    for(;j<l1;j++)
    {
        char ch1=str1.charAt(j);
        char ch2=str2.charAt(p);
        if(ch1==ch2)
        {
            p++;
            count++;
        }
        else if(count==l2)
        {
            break;
        }
        else
        {
            p=0;
            count=0;
        }
    }
    if(l2==count)
    return true;
    else
    return false;
}

但是这个测试用例失败了:

  • 输入:occurs('Trisect Institute', 'Trisect')
  • 输出:null
  • 预期输出:true

我做错了什么?

【问题讨论】:

  • 是否有任何限制禁止您使用str1.contains(str2)
  • @dounyy 是的,除了 concat 和我使用的函数,我不能使用任何其他函数。

标签: java if-statement for-loop


【解决方案1】:

您的else if(count==l2) 声明放错了地方。在您的代码中,此条件不会检查何时ch1 == ch2。以下内容可能对您有所帮助:

public boolean occurs(String str1, String str2) {
    int l1=str1.length();
    int l2=str2.length();
    int p=0;
    int count=0;
    int j=0;
    for(;j<l1;j++) {
        char ch1=str1.charAt(j);
        char ch2=str2.charAt(p);
        if(ch1==ch2) {
            p++;
            count++;
        } else {
            p=0;
            count=0;
        }
        if(count==l2) {
            break;
        }
    }
    if(l2==count)
        return true;
    else
        return false;
}

【讨论】:

    【解决方案2】:
    if(str1.contains(str2)){
        //str1 contains str2, do something here
    } else {
        //str1 doesn't contain str2, do something different here
    }
    

    【讨论】:

      【解决方案3】:

      您面临的问题是因为您在 while 语句中有 return 语句。所以回报并不总是可及的。

      你必须在 while

      if (count == str2.length()) {
          return true;
      } else {
      
          return false;
      }
      

      【讨论】:

        【解决方案4】:

        您的代码有很多问题。但是,我建议使用 Java 提供的内置字符串函数之一,例如 String.indexOf() 或 String.contains()。

        • 如果第一个字符不匹配,则返回 true 或 false。
        • 您的方法中没有 return 语句(它不应该编译)
        • 您正在检查 char 索引范围,如果它们在同一范围内,则递增它们。这没有意义。你想完成什么?
        • 如果要进行不区分大小写的匹配,则可以在开始比较之前使用 String.toLower()
        • 如果第一个字符超出范围且不同,它将完全跳过检查。
        • 没有任何 cmets 可以解释您要尝试的内容

        我至少会尝试修复其中的一些问题,并在循环的每次迭代中打印出结果(或使用调试器)来帮助您。

        【讨论】:

        • 请尝试理解。
        【解决方案5】:

        如果您不担心从头开始构建功能,请使用 String.contains() 方法,否则使用 KMP 或 boyre moore 文本搜索算法,您也可以尝试使用蛮力方法,但效率不高

        【讨论】:

          【解决方案6】:
          public boolean occurs(String str1, String str2) {
              //write your code here
              int len1=str1.length();
              int len2=str2.length();
          
              for(int i=0;i<(len1-len2+1);i++)
              {   
                  String str="";
                  for(int j=i;j<i+len2;j++)
                  {
                      str=str+str1.charAt(j);
                      if(str.equals(str2)) return true;
                  }
              }
              return false;
          }   
          

          【讨论】:

          • 我想它需要的指导不仅仅是未注释的代码块。一些意见将不胜感激。
          猜你喜欢
          • 1970-01-01
          • 2013-12-02
          • 2014-01-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-22
          • 2011-02-04
          • 2014-09-09
          相关资源
          最近更新 更多