返回字符串" hello / HELLO / hellO ..."的次数。出现在给定字符串中的任何位置

时间:2015-11-21 15:33:31

标签: java loops if-statement

  

返回字符串" hello / Hello / ... etc"的次数出现在给定字符串中的任何位置。

     

问题的不同之处在于

     

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

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

示例输出#1
1

示例输入#2
伯爵("嗨。你好。你好。好的")

示例输出#2
2

示例输入#3
计数("喜&#34)

示例输出#3
0

MyApproach

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

我得到以下输出。

  

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

4 个答案:

答案 0 :(得分:6)

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

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

str1 startsWith或endsWith 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:   **

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

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

答案 1 :(得分:0)

如果这是学校作业,那么请说明。 否则你需要在谷歌上提问: &#39;计算字符串java中的出现次数&#39;或者其他的东西。 这将给你 - tada - stackoverflow:

Occurrences of substring in a string

希望能有所帮助。

答案 2 :(得分:0)

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

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

答案 3 :(得分:-1)

//在这里我们用小写改变了每个大写字符,以便将它与s2进行比较 public int count(String str){         String s1 =&#34;&#34 ;; String s2 =&#34; hello&#34 ;; int l2 = s2.length(); int count = 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;

}