hiwa doski Ответов: 2

Как написать метод, возвращающий "Миссисипи" слово с наибольшим количеством дубликатов в массиве ?


массив таков
String[] words = {"Apple", "cheese", "Mississippi", "beer", "hand", "sandwich", "kadabra"};



мои решения были примерно такими
1-
public static String LongestWord() {
        String[] words = {"Apple", "cheese", "Mississippi", "beer", "hand", 
        "sandwich", "kadabra"};

        String maxLength = words[0];
        String newString = "";


        for (String str : words) {

            for (int i = 0; i < str.length(); i++) {
                {
                  for (int j=i+1; j<str.length(); j++){
 if="" (str.charat(i)="=" str.charat(j)){
 newstring+="str.charAt(i);
}
}

(newstring.length()=""> maxLength.length()) {
                maxLength = newString;
            }
        }

        return maxLength;
    } 


проблема с приведенным выше решением заключается в том, что оно не проходит через все символы строки, начинающейся с "i", и перед "i" может быть дубликат, и он не обнаружит его, поэтому он не работает.

2-
public static String LongestWord() {
        String[] words = {"Apple", "cheese", "Mississippi", "beer", "hand", "sandwich", "kadabra"};
        String maxLength = words[0];
        String newString = "";
        for (String str : words) {
            for (int i = 0; i < str.length(); i++) {
                {                  
for (int j=str.length()-1; j>=0; j--){
                      if (str.charAt(i) == str.charAt(j)){                          newString+=str.charAt(i);
                      }
                    }
                }
            }
            if (newString.length() > maxLength.length()) {
                maxLength = newString;
            }
        }
        return maxLength;
    } 


эта буква ближе к работе, но у нее все еще есть проблема, и это когда, например, "i=0" и "j" достигают 0, то она будет равна, потому что это одна и та же буква, но не дубликат, и я пробовал много других тоже, но ничего не получалось.

Что я уже пробовал:

Я пробовал много решений, но ни одно из них не сравнивало всех персонажей друг с другом.

Patrice T

Вам нужно показать свою работу.

CPallini

Как вы считаете дубликаты? Например, каков ожидаемый результат для "Миссисипи"?

hiwa doski

это 4 "s"

CPallini

Почему бы и нет - я...s? Есть также четыре - я...s. или вы должны считать буквы, которые входят в соседние пары?

hiwa doski

я не думаю, что это имеет значение, пока нет слова с более чем 4 дублированными символами.

CPallini

Предположим, что у вас есть "ророр" и "foo" У кого из них больше дубликатов?

hiwa doski

"roror" , потому что он имеет три дублируются "р" и "Foo" есть только два дублируются "о" так "roror" должны быть возвращены.

CPallini

Тогда смотрите мое решение.

Maciej Los

Пожалуйста, обновите свой вопрос и вставьте соответствующий код между pre теги.

hiwa doski

но разве ты уже не сделал этого?

Maciej Los

Да, я так и сделал, но оно кажется неполным или недействительным.

hiwa doski

я думаю, что все в порядке, но взгляну на него и поблагодарю вас.

2 Ответов

Рейтинг:
2

OriginalGriff

Мы более чем готовы помочь тем, кто застрял, но это не значит, что мы здесь, чтобы сделать все это для вас! Мы не можем сделать всю работу, вам либо платят за это, либо это часть ваших оценок, и было бы совсем несправедливо, если бы мы сделали все это за вас.

Поэтому нам нужно, чтобы вы сделали работу, и мы поможем вам, когда вы застряли. Это не значит, что мы дадим вам пошаговое решение, которое вы можете сдать!
Начните с объяснения, где вы находитесь в данный момент и каков следующий шаг в этом процессе. Затем расскажите нам, что вы пытались сделать, чтобы этот следующий шаг сработал, и что произошло, когда вы это сделали.

Но я дам вам подсказку: отсортировать строки, чтобы они стали "Aelpp", "ceeehs", iiiimppssss", "пиво", ...
Тогда подсчет повторяющихся символов становится тривиальным!


hiwa doski

нет, мне не платят, и это не домашнее задание, это просто проблема, которую я нашел в интернете и хочу знать ее решение, и я перепробовал много решений, и я потратил на это много времени
мои решения были примерно такими
1-

public static String LongestWord() {
        String[] words = {"Apple", "cheese", "Mississippi", "beer", "hand", 
        "sandwich", "kadabra"};

        String maxLength = words[0];
        String newString = "";


        for (String str : words) {

            for (int i = 0; i < str.length(); i++) {
                {
                  for (int j=i+1; j<str.length(); j++){
="" if="" (str.charat(i)="=" str.charat(j)){
="" newstring+="str.charAt(i);
" }
="" }

="" (newstring.length()=""> maxLength.length()) {
                maxLength = newString;
            }
        }

        return maxLength;
    } 

// проблема с приведенным выше решением заключается в том, что оно не проходит через все символы строки, которая начинается с "i", и перед "i" может быть дубликат, и он не обнаружит его, поэтому он не работает.

2- Покажите   Расширять   скопировать код
public static String LongestWord() {        String[] words = {"Apple", "cheese", "Mississippi", "beer", "hand", "sandwich", "kadabra"};        String maxLength = words[0];        String newString = "";        for (String str : words) {            for (int i = 0; i < str.length(); i++) {                {                  for (int j=str.length()-1; j>=0; j--){                      if (str.charAt(i) == str.charAt(j)){                          newString+=str.charAt(i);                      }                    }                }            }            if (newString.length() > maxLength.length()) {                maxLength = newString;            }        }        return maxLength;    }  

//эта буква ближе к работе, но у нее все еще есть проблема, и это когда, например, "i=0" и "j" достигают 0, то она будет равна, потому что это одна и та же буква, но не дубликат, и я пробовал много других тоже, но ничего не получалось.

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

hiwa doski

ладно, сделаем это.

Maciej Los

5ed!

Рейтинг:
11

CPallini

При простом подходе вы упорядочиваете буквы внутри слов (например, mississippi становится iiiimppssss), то задача становится тривиальной.


[обновление]

Попробуйте следующую программу:

import java.util.*;

class Duplicates
{
  public static int count(String s)
  {
    char a[] = s.toCharArray();
    Arrays.sort(a);

    int cnt = 1;
    int max_cnt = 1;
    char cur = a[0];
    for (int n = 1; n < a.length; ++n)
    {
      if (cur != a[n])
      {
        if (max_cnt < cnt)
        {
          max_cnt = cnt;
        }
        cur = a[n];
        cnt = 1;
      }
      else
        ++cnt;
    }

    return max_cnt >= cnt ? max_cnt : cnt;
  }

  public static void main(String args[])
  {

    String[] words = {"Apple", "cheese", "Mississippi", "beer", "hand", "sandwich", "kadabra"};

    for (String s : words)
      System.out.printf( "%s: %d\n", s, Duplicates.count(s));

  }
}

[/обновление]


hiwa doski

Большое вам спасибо за вашу помощь.

CPallini

Добро пожаловать.

Maciej Los

5ed!

CPallini

Большое тебе спасибо, Мацей.