user4833678
user4833678

Reputation:

Find the word with the greatest numbers of repeated letters

For this challenge I need to find the word with the greatest numbers of repeated letters. For example, if I enter Hello world! the output should be Hello as it contains 2 characters of l, or No words and it should be -1. I broke down the problem into:

1) Broke a sentence into the array of words

2) Went through each word in a loop

3) Went through each charcater in a loop

I'm stuck in how I should return if a word contains more letters than any other.

public static void main(String[] args) {
    Scanner kbd = new Scanner(System.in);
    System.out.println("Enter any sentence or word combination: ");
    String myString = kbd.nextLine();
    String result = "";
    int count = 0;

    String[] words = myString.split("\\s+");
    for(int i = 0; i < words.length; i++) {
        for(int j = 0; j < words[i].length(); j++) {
            for(int k = 1; k < words[i].length(); k++) {
                char temp = words[i].charAt(k);
                if(temp == words[i].charAt(k-1)) {
                    count++;
                }

            }

        }
    }
}

Upvotes: 1

Views: 4484

Answers (3)

Evilsanta
Evilsanta

Reputation: 1072

If you just need the ONE word with the greatest count, you only need three variables, one for currentBestWord, one for currentLargestCount, and one to keep the count of characters in a word.

int currentLargestCount=0;
String currentBestWord="";
HashMap<String,Integer> characterCount=new HashMap<String,Integer>();
String[] words=myString.split("\\s+");
for(int i=0;i<words.length;i++){
    String w=words[i];
    characterCount=new HashMap<String,Integer>();
    for(int j=0;j<w.length();j++){
        String character=w.charAt(j).toString();
        if(characterCount.containsKey(character)){
            characterCount.put(character,characterCount.get(character)+1);
        }else{
             characterCount.put(character,1);
        }
    }
    // Now get the largest count of this word
    Iterator ir=characterCount.ValueSet().iterator();
    int thiscount=0;
    while(ir.hasNext()){
         int thischaractercount=ir.next();
         if(thiscount<thischaractercount) thiscount=thischaractercount;
    }
    if(thiscount>currentLargestCount){
        currentLargestCount=thiscount;
        currentBestWord=w;
    }
}

Upvotes: 0

GreySage
GreySage

Reputation: 1180

You'll want to create an array of length = words.length, and store the highest value for each word in its relative index:

int counts[] = new int[words.length];
for(int i = 0; i < words.length; i++) {
    for(int j = 0; j < words[i].length(); j++){
            count = 0
            for(int k = k+1; k < words[i].length(); k++){
                if(words[i].charAt(j) == words[i].charAt(k)){
                    count++;
                }
            if(counts[i] < count)
                  counts[i] = count;
      }

}

Then just scan through the array for the highest value, n, and return words[n]

Upvotes: 0

Iłya Bursov
Iłya Bursov

Reputation: 24146

You almost did it and I suppose you're looking into something like this:

static int mostFreqCharCount(final String word) {
    final int chars[] = new int[256];

    int max = 0;
    for (final char c : word.toCharArray()) {
        chars[c]++;
        if (chars[c] > chars[max]) // find most repetitive symbol in word
            max = c;
    }
    return chars[max];
}

public static void main(final String[] args) {
    System.out.println("Enter any sentence or word combination: ");

    final Scanner kbd = new Scanner(System.in);
    final String myString = kbd.nextLine();
    kbd.close();

    int maxC = 0;
    String result = "";

    final String[] words = myString.split("\\s+");
    for (final String word : words) {
        final int c = mostFreqCharCount(word);
        if (c > maxC) {
            maxC = c;
            result = word;
        }
    }

    if (maxC > 1) // any word has at least 1 symbol, so we should return only 2+
        System.out.println(result);
}

the main idea - calculate number of most frequent symbol for each word and store only maximal one in variables maxC and result

Upvotes: 5

Related Questions