找到最长的字符串

时间:2014-02-28 05:57:10

标签: java string

我有一个很大的字符串,如“墙壁大厅到墙壁大厅坠落”,我想要打印最长的字符串。然后我想知道所有最长的字符串重复多少次? 例如,最长的字符串是:
墙重复2
大厅重复2
跌倒重复1
这是我的代码:

public void bigesttstring(String str){
    String[] wordsArray=str.split(" ");
    int n= str.trim().split("\\s+").length;
    int maxsize=0;
    String maxWord="";
    for(int i=0;i<wordsArray.length;i++){
        if(wordsArray[i].length()>maxsize){
             maxWord=wordsArray[i];
             maxsize=wordsArray[i].length();
        }
    }
    System.out.println("Max sized word is "+maxWord+" with  size "+maxsize);
}

但此代码仅打印“墙”。
for count repeated String(我的意思是“maxWord”),此代码写:

int count=0; 
for(int i=0;i<wordsArray.length;i++){
    if(maxWord.equals(wordsArray[i])){
         count++;
    }
}

并显示其他最长的字符串我有这段代码:

int k=0;
for(int i=0;i<wordsArray.length;i++){
    if(maxWord.equals(wordsArray[i])){
         continue;
    }
    if(maxsize==wordsArray[i].length()){
         k++;
    }
}
String[] other=new String[k];
int o=0;
for(int i=0;i<wordsArray.length;i++){
    if(maxWord.equals(wordsArray[i])){
         continue;
    }
    if(maxsize==wordsArray[i].length()){
         other[o]=wordsArray[i];
         o++;
    }
}  

我允许使用此功能:

char char At(int i);               
int ComoareTo(String another string);              
boolean endsWith(String suffix);                     
int indexof();                      
int indexof(String str);                       
String substring();
char[] toCharArray();                            
String lowercase();         

并希望像这样的其他代码用于最短的字符串。

4 个答案:

答案 0 :(得分:0)

你写过

  if(wordsArray[i].length()>maxsize)

对于wall, hall and fall,仅适用于first wall。这就是你得到wall and size 4的原因。 在这里,您不会考虑不同字符串的最长字符串长度可能相同。您必须在array中存储最长的字符串,而if condition应该

   if(wordsArray[i].length()>=maxsize)

你会单独考虑= and >个案。因为在>的情况下,您必须delete all the string in array

答案 1 :(得分:0)

您需要将其更改为相等,因为当前如果单词与当前最大单词的长度相同,则会忽略它。如果你想要它有最大的话。您需要将它们存储在一个数组中。我在这里实现了它。

package OtherPeoplesCode;

public class string {

    public static void main(String[] args) {
        bigeststring("wall hall to wall hall fall be");
    }

    public static void bigeststring(String str){
        String[] wordsArray=str.split(" ");
        String[] biggestWordsArray = new String[wordsArray.length];
        int x = 0;
        int n= str.trim().split("\\s+").length;
        int maxsize=0;
        String maxWord="";
        for(int i=0;i<wordsArray.length;i++){
            if(wordsArray[i].length()>maxsize){
                maxWord=wordsArray[i];
                maxsize=wordsArray[i].length();
                for(int y = 0; y <= biggestWordsArray.length -1; y++){
                    biggestWordsArray[y] = "";
                }
            }
            else if(maxsize==wordsArray[i].length()){
                biggestWordsArray[x] = wordsArray[i];
                x++;
            }
        }
        if(biggestWordsArray[0].equals("")){
            System.out.println("Max sized word is "+maxWord+" with  size "+maxsize);
        }
        else if(!(biggestWordsArray[0].equals(""))){
            System.out.println("TIE!");
            for(int y = 0; y <= biggestWordsArray.length -1; y++){
                if(!(biggestWordsArray[y].equals(""))){
                    System.out.print("Word #" + y + " is ");
                    System.out.println(biggestWordsArray[y]);
                }
            }
        }
    }
}

编辑:这是工作代码,对延迟感到抱歉。

答案 2 :(得分:0)

使用Map可能是最直接,最简单的方法。但是,如果你说你的老师不允许你使用它,你可以告诉我们什么是允许的吗?因此,我们最终不会浪费时间建议不同的方法,最终没有一个是可以接受的,因为你的老师不允许

我可以建议你尝试一种最蛮力的方法(很多优化的地方,但我认为你可能想要最简单的方法):

  1. 循环显示单词列表,找出最长单词的长度和长度为
  2. 的单词数量
  3. 创建一个新的数组,其中包含您在1中找到的“单词数”。再次遍历原始单词列表,对于每个长度为== maxWordLength的单词,将其放入新数组中,如果它尚未存在于其中(通过循环进行简单检查。
  4. 现在你有一个列表,其中包含所有“最长”的DISTINCT字,最后有一些可能为null。为了以“word:numOfOccurence”之类的格式显示它们,您可以执行类似
  5. 的操作
  6. 循环遍历结果数组,直到您达到null。对于结果数组中的每个单词,在原始单词列表中有一个循环来计算其出现次数。然后,您可以根据需要打印出消息
  7. 在伪代码中:

    String[] wordList = ....;
    int maxLen = 0;
    int maxLenOccurence = 0;
    foreach word in wordList {
        if word is longer then maxLen {
           maxLen = word's length
           maxLenOccurence = 1;
        } 
        else if word's length is equals to maxLen {
           maxLenOccurence ++
        }
    }
    
    // 2,3
    String[] maxLenWordList = new String[maxLenOccurence];
    foreach word in wordList {
        else if word's length is equals to maxLen {
            for i = 0 to maxLenWordList length {
               if (maxLenWordList[i] == word)
                  break
               if (maxLenWordList[i] == null
                  maxLenWordList[i] = word
        }
    }
    
    //4
    foreach maxLenWord in maxLenWordList {
        count = 0
        foreach word in wordList {
           if maxLenWord  == word
              count ++
        }
        display "Max sized word is "+ maxLenWord + " with size " + count
    }
    

    另一种不涉及其他数据结构的方式是:

    1. 有单词列表
    2. 首先按字母长度排序单词列表,然后按字面值
    3. 排序
    4. 结果列表的第一个元素是最长的元素,具有相同值的字符串变为相邻元素。你可以循环打印所有匹配及其计数(在这里做一些自己的思考。不应该那么难)

答案 3 :(得分:-1)

您也可以使用它;

String[] allLongestStrings(String[] inputArray) {
    List<String> list = new ArrayList<String>();
    int max = 0;

    for (int i = 0; i < inputArray.length; i++) {
        StringBuilder s = new StringBuilder(inputArray[i]);
        int n = s.length();

        if (n > max) {
            max = n;
        }
    }
    
    for (int i = 0; i < inputArray.length; i++) {
        StringBuilder s = new StringBuilder(inputArray[i]);
        int n = s.length();

        if (n == max) {
            list.add(s.toString());
        }
    }
    
    return list.toArray(new String[list.size()]);
}