【问题标题】:Return the number of times the string "hello/HELLO/hellO ..." appears anywhere in the given string返回字符串 "hello/HELLO/hellO ..." 在给定字符串中出现的次数
【发布时间】:2015-11-21 15:33:30
【问题描述】:

返回字符串“hello/Hello/...etc”在给定字符串中出现的次数。

问题的不同之处在于

字符串 hello 在任何情况下都可以是大写或小写。

示例输入 #1
count("abc hello def")

示例输出 #1
1

示例输入 #2
count("你好。你好。你好。好的")

示例输出 #2
2

示例输入 #3
计数(“嗨”)

示例输出 #3
0

我的方法

public int count(String str)
    {
      String str1="Hello";

        int l=str.length();
        int l1=str1.length();
        if(l<l1)
        {
         return 0;
        }
        else
        {
           int count=0;
           int p=0;
           int j=0;
           while(j<l)
           {
            char c=str.charAt(j);
            char c1=str1.charAt(p);
            if(c==c1)
             {
               p++;

               if(p==l1)
               {
                count++;
                p=0;
               }  

             }
             else
             {
                 p=0;
             }
             j++;

           } 

     return count;
    }

}

Output       TestcaseParameters Testcase Actual Answer  Expected

No output    'HELLO how are you'               0             1

我得到以下输出。

谁能告诉我我做错了什么?

【问题讨论】:

  • @RileyCarney contains 无助于计数。
  • + 32- 32 逻辑是否旨在处理大写与小写?您可以查看stackoverflow.com/questions/10320200/… 以获得更好的方法。
  • 我已经更新了我的代码。唯一的区别是我需要找到的字符串模式在任何情况下都可以。
  • @Jasonarora:我在第一个版本中并不清楚。但是您不能将全部转换为小写并使用另一个问题中的一种方法吗?

标签: java loops if-statement


【解决方案1】:

我想知道您的代码是如何编译的。 c1 甚至没有被声明。我可能会使用这样的逻辑:

str1.toUpperCase().split(str2.toUpperCase).length()-1

str1开始或结束str2时,上面的代码不会返回正确答案。这是一个更好的版本:

public static int count(String str1, String str2) {
    int count = 0;
    int len1 = str1.length();
    int len2 = str2.length();
    for (int i=0;i<=len1-len2;++i){
        if ((str1.substring(i,i+len2)).equalsIgnoreCase(str2)) {
            ++count;
        }
    }
    return count;
}

代码将str2 向右移动一次,并比较str2 是否与str1 的子字符串相同。请注意,在str1 = "AAA" 和 str2 = "AA" 的情况下,结果为 2,因为 AA 的第一次和第二次出现都会匹配。
第 1 步:

str1: *****
str2: **

第 2 步:

str1: *****
str2:  **

第 3 步:

str1: *****
str2:   **

第 4 步:

str1: *****
str2:    **

如果您希望在上述情况下,AA 只计算一次,这里是您的代码:

public static int count(String str1, String str2) {
    int count = 0;
    int len1 = str1.length();
    int len2 = str2.length();
    for (int i=0;i<=len1-len2;){
        if ((str1.substring(i,i+len2)).equalsIgnoreCase(str2)) {
            ++count;
            i+=len2;
        }else{
            ++i;
        }

    }
    return count;
}

上面的这个版本是这样工作的:

第 1 步:

str1: *****
str2: **

第 2 步:

str1: *****
str2:   **

它不会比较前面步骤中已经比较过的任何字符。

我根据您的示例输入数据测试了代码,它们都返回了预期的结果。

【讨论】:

  • 我对你投了赞成票,但这实际上根本不正确,我认为应该对其进行编辑。如果 hello 位于开头或结尾或仅位于中间,结果可能会有所不同。
  • 谢谢@YassinHajaj。这是我脑海中的一些伪代码。我会编辑和完善它。
  • 没问题。但它很聪明:)。
  • @ElgsQianChen 我已经更新了我的代码。先生,你能告诉我我犯了什么错误吗?因为我会保留你的代码以供参考。
  • 谢谢@YassinHajaj。我编辑了我的答案并制作了一个更严肃的版本。
【解决方案2】:

如果这是一项学校作业,请这样说。 否则你需要在谷歌上问一个问题,比如: 'count出现在字符串java中'或其他东西。 这会给你 - tada - stackoverflow:

Occurrences of substring in a string

希望能有所帮助。

【讨论】:

    【解决方案3】:

    这是一个非常直观的解决方案:

    public static void main(String[] args) {
        System.out.println(count("hellohellohellohihihihihihihellohihhihello")); // Prints : 5
    }
    
    public static int count(String str){
        String str1 = "hello";
        String str2 = str.toLowerCase();
        int index = 0;
        int count = 0;
    
        while (true){
            if (str2.contains(str1)){
                count++;
                str2 = str2.substring(str2.indexOf(str1) + str1.length(), str2.length());
            } else {
                return count;
            }
        }
    }
    

    【讨论】:

      【解决方案4】:

      //在此我们将每个大写字符更改为小写,以便与 s2 进行比较 公共整数计数(字符串 str){ 字符串 s1="";字符串 s2="你好"; int l2=s2.length();整数计数=0;

          int l1=str.length();
          for(int i=0;i<=l1-l2;i++){
              for(int j=i;j<l2+i;j++){
                  char ch=str.charAt(j);
                  if(ch>=65&&ch<=90){
                      ch=(char)(ch+32);
                      s1=s1+ch;
                  }
                  else
                  s1=s1+ch;
              }
              if(s1.equals(s2)){
                  count++;
              }
      //in that line i have removed the data of string s1 to form new string again
                 s1="";
          }return count;
      
      }
      

      【讨论】:

        猜你喜欢
        • 2020-05-02
        • 1970-01-01
        • 2011-12-14
        • 2018-11-07
        • 2012-05-10
        • 2016-04-05
        • 2021-12-26
        • 1970-01-01
        • 2012-11-10
        相关资源
        最近更新 更多