找到一个不是另一个单词的子串的单词

时间:2010-06-29 06:35:14

标签: java

如何找到长度为x的单词 这不是另一个长度为y的字符串的子字符串,

X < ÿ? e.g

word is - apple
req word - ape
word is aaabbab
req word - aba

4 个答案:

答案 0 :(得分:1)

我想你要检查x.length()< y.length()和y.indexOf(x)== - 1

答案 1 :(得分:1)

比如说:

import org.testng.annotations.Test;

public class TestNotSubstring {

    public String notSubstring(String sY, int x) {
        if (sY.length() > x) {
            String sX = sY.substring(0, x - 1);
            sX = sX + (new Character((char) (sY.charAt(x)+1)).toString());
            return sX;
        } else {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < x; i++) {
                sb.append("a");
            }
            return sb.toString();
        }
    }

    @Test
    public void testApple() {
        String sY = "apple";
        String sX = notSubstring(sY, 3);
        System.out.println(sX);
        assert(!sY.contains(sX));
    }

    @Test
    public void testOrange() {
        String sY = "orange";
        String sX = notSubstring(sY, 5);
        System.out.println(sX);
        assert(!sY.contains(sX));
    }
}

答案 2 :(得分:1)

我相信这样的问题是:

public class SubsequenceNotSubtring {
    static void subseqNotSubstring(String word, int L) {
        search(word, L, "", 0);
    }
    static void search(String word, int L, String subseq, int index) {
        if (L == 0 && !word.contains(subseq)) {
            System.out.println(subseq);
            return;
        }
        for (int i = index; i < word.length(); i++) {
            search(word, L-1, subseq + word.charAt(i), i+1);
        }
    }
    public static void main(String[] args) {
        subseqNotSubstring("apple", 3);
        subseqNotSubstring("aaabbab", 3);
    }
}

这列出了给定字符串中不是subsequences的给定长度的所有substrings

上面的代码段找到以下内容(已注释,删除了dupes):

apple,3   => apl, ape, ale, ppe
aaabbab,3 => aba, bbb

应该注意的是,这种算法是天真的蛮力,具有可怕的渐近复杂性。如果需要,当然可以编造具有更复杂的字符串数据结构的更好的算法。最有希望的方向是使用suffix tree

答案 3 :(得分:1)

如何开始(可能很慢)但很容易理解

 Generate a list of letter combinations

     a p p
     a p p l
     a p p l e
     a p l
     a p l e
     a p e
     a l e  <=== look another answer
     p p l
     p p l e
     p l e

 Test each list item to see a). whether it is a substring b) whether it is a word

生成该列表可以很好地作为递归例程。