繁体   English   中英

如何检查字符串中的字符出现次数?

[英]How can I check character occurrence in a string?

我的问题是——

输入是字符串。 如果 String 恰好有 1 个字符在字符串中出现两次,0 个字符在字符串中出现三次,并且至少有 1 个字符在字符串中出现四次或更多次,则返回 true。 我的代码有问题,我无法找出问题所在。

public class CheckCharacterOccurence {

    static String testcase1 = "jjiiiiyy";

    public static void main(String[] args) {
        CheckCharacterOccurence testInstance = new CheckCharacterOccurence();
        boolean result = testInstance.checkCharacterOccurence(testcase1);
        System.out.println(result);
    }

    public boolean checkCharacterOccurence(String str) {
        char ch=' ';
        char ch1=' ';
        int temp=0;
        int temp1=0;
        int temp2=0;
        int count=0;
        for(int i=0;i<str.length();i++){
            ch=str.charAt(i);
            for(int j=i;j<str.length();j++){
                if(str.charAt(i)==str.charAt(j)){
                    ch1=str.charAt(i);
                    count++;
                }
            }
            System.out.println(count);
            if(count==2&&ch!=ch1){
                temp++;
            }
            if(count==3&&ch!=ch1){
                temp1++;
            }
            if(count>=4){
                temp2++;
            }
            count=0;
        }
        if(temp==1&&temp1==0&&temp2>=1){
            return true;
        }
        return false;
    }
}

我建议使用map对于字符串中的所有字符,增加 map[that_char]

最后遍历地图以查找每个字符出现的次数。

或者,您也可以使用数组来保持计数。

就像是

int [] ctr = new int[256]
ctr = all zeroes
for (ch : string)
  ctr[ch]++

mxocc = 0
maxch = 'a'
for(ch = a, b, c, d, e...) 
  if(ctr[ch] > maxocc) maxocc = ctr[ch] and maxch = ch 
Output require info

嘿,你可以找出问题所在......至少我可以提供一些扩展相同的代码,你可以检查它并尝试解决你的问题......这个程序找到了字符串中的模式,现在你可以通过这个程序,并尝试由您自己解决您程序中的问题。并尝试由您自己完成,只有您的编码技能才会得到提高。如果您认为它真的有帮助,请投票这个答案

          #include<stdio.h>
          #include<string.h>

          int occur(char[],char[]);

          int occur(char sent[],char pattern[])
            {

          int count=0;

          for(int i=0,j=i;sent[i]!='\0';)
           {
        if(sent[i+j]==pattern[j]&&pattern[j]!='\0')
         {
         j++;


         }
               else if(j==strlen(pattern))
           {
           count++;
           i=i+j;
           j=0;
           }
         else
          {
        i++;
        j=0;

          }

         }
  return count;
 }

    int main()
    {
   char sent[] = "aabaabaaabbbabababddfggaabbbasab";
   char pattern[] = "aba";
   int result = occur(sent,pattern);
   printf("\nNo of Occurrences --- > %d",result);
   return 0;
    }

你应该简化你的代码。 例如,不需要使用那些复杂的 for 循环,您可以使用 for-each。 此代码找出字符串中字符的频率并将其存储在 Map 中。

import java.util.*;
public class CheckCharacterOccurence {

public static void main(String[] args) {
      Map<Character, Integer> counting = new HashMap<Character, Integer>();
      String testcase1 = "Helloooo";
      for(char ch: testcase1.toCharArray()){
        Integer freq = counting.get(ch);
        counting.put(ch, (freq == null) ? 1 : freq + 1);
      }
      System.out.println(counting.size() + " distinct characters:");
      System.out.println(counting);
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM