java:如何知道字符串中重复的单词?

java:如何知道字符串中重复的单词?,java,string,Java,String,你能告诉我是否有办法知道字符串中重复的单词吗?例子: 检查这个单词是否重复 字符串hihihi在本例中,重复的单词为hi 字符串hellohellohellohello在这种情况下,重复的单词是hello 字符串feefee在本例中,重复的单词是fee 字符串AAAAA在本例中,重复的单词是A 知道重复的单词由1到6个字符组成 最好的祝愿,Maya算法很简单: 查看第一个字符是否在整个字符串中重复 查看前两个字符是否在整个字符串中重复 查看前三个字符是否在整个字符串中重复 查看前四个字符是否在整

你能告诉我是否有办法知道字符串中重复的单词吗?例子: 检查这个单词是否重复 字符串hihihi在本例中,重复的单词为hi

字符串hellohellohellohello在这种情况下,重复的单词是hello

字符串feefee在本例中,重复的单词是fee

字符串AAAAA在本例中,重复的单词是A

知道重复的单词由1到6个字符组成


最好的祝愿,Maya

算法很简单:

查看第一个字符是否在整个字符串中重复 查看前两个字符是否在整个字符串中重复 查看前三个字符是否在整个字符串中重复 查看前四个字符是否在整个字符串中重复 查看前五个字符是否在整个字符串中重复 查看前六个字符是否在整个字符串中重复 要查看字符i是否是单词中初始k个字符的重复字符,请使用

if (s.charAt(i) == s.charAt(i%k))

其中k是要检查的单词的长度。如果某个特定k的所有字母都通过了此测试,并且字符串的长度可被k整除,即s.length%k==0,则单词s由长度为k的重复单词组成。

没有内置Java函数来完成此操作,因此您必须编写自己的程序

首先看一下您的示例HelloHelloHello。hello这个词是重复的,hell、ello、hell等词也是重复的。这让人感觉像是课程中的一个问题,因此请与您的讲师确认只需要最长的单词

首先查找最长的重复单词,最多六个字符。试着重复一个六个字符的单词。如果没有,那么寻找一个五个字符的重复单词,依此类推,直到一个一个字符的重复单词。从最长的单词开始,如果不需要的话,你可以避免浪费时间去寻找较短的单词。如果你的老师想要所有的单词,那么你找到它们的顺序并不重要


这意味着您需要编写一个方法来查找字符串中n个字符的重复单词,其中n是传递给该方法的参数。首先集中精力写那个方法。如果遇到问题,请再次在此询问。

此代码将解决您的问题。但这不是一般情况

public class MaxSubString {
    private final static int MAX_SUB_STRING_LENGTH = 6;

    public static void main(String [] args){
        System.out.println(maxSubString("hellohellohello")); // result is hello
        System.out.println(maxSubString("helhelhel")); // result is hel
        System.out.println(maxSubString("AAAAAAAAAAAAA")); // result is A
        System.out.println(maxSubString("hehehehehehe")); // result is he
    }

    public static String maxSubString(String inputString){
        int maxSubStringLength = calculateMaxSubStringLength( inputString);
        return inputString.substring(0,maxSubStringLength);
    }

    public static int calculateMaxSubStringLength(String inputString) {
        int result = -1;
        for(int i= MAX_SUB_STRING_LENGTH ; i>0 ; i--){
            if(inputString.length() < i *2)
                continue;
            if (inputString.substring(0,i).equals(inputString.substring(i , 2*i)))
            result = i;
        }
        return result;
    }
}

那么这个字符串除了重复的单词外什么都没有?也许是这个?这是你的家庭作业吗???@saman为什么会有什么不同?@Takendark因为我们不会为其他人做家庭作业,特别是如果他们自己似乎没有尝试过任何东西,正如我在回答中所说,首先查找六个字符的重复,然后再查找较短的重复,可能更有效。@rossum正确性先于效率:aaaaaaaa是一个单词,其中a重复了12次,但如果您先检查长度6,您会发现它由两个六个字母的单词AAAAAA组成。谢谢您的回复。是的,在aaaaaaaa的情况下,当A重复12次时,重复的单词应该是A,而不是像dasblinkenlight所说的六个字母的单词aaaaa