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

时间:2014-04-12 07:11:52

标签: java string

我的问题是 -

输入是字符串。如果字符串恰好有一个字符在字符串中出现两次,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;
    }
}

3 个答案:

答案 0 :(得分:1)

我建议使用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

答案 1 :(得分:0)

嘿,你可以弄清楚问题...至少我可以给一些扩展相同的代码,你可以检查它并尝试解决你的问题...这个程序找到字符串中的模式,现在你可以通过这个程序,并试图通过你自己解决你的程序中的问题。并尝试自己做,然后只有你的编码技能会得到改善。如果你真的有帮助,投票给这个答案

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

答案 2 :(得分: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);
    }

}