【问题标题】:Make Possible sets of given strings in java在java中制作可能的给定字符串集
【发布时间】:2016-06-12 14:46:31
【问题描述】:

我想为任何字符串动态编码。

例如,如果我使用三个字符串"a" "b" "c"

我想得到结果:

String []array= {"a", "b", "c", "a b", "b c", "a b c"};

(有意缺少“a c”)

对于四个字符串"a" "b" "c" "d" 我想得到结果

"a" "b" "c" "d" "a b" "b c" "c d" "a b c" "b c d" "a b c d"

【问题讨论】:

  • "a c" 发生了什么?
  • 不,先生,我不需要“ac”。只是我想要像“a”“b”“c”“a b”“b c”“abc”这样的输出。
  • 先生,如果我取四个字符串,那么输出应该是... abcd= "a" "b" "c" "d" "a b" "b c" "c d" "a b c" "b c d" "a b c d"
  • 哦,所以这不是一个简单的错误。在这种情况下,我将重新打开它,因为指出的重复不符合您的要求。
  • 你能解释一下“动态代码”吗?您是否希望您的 IDE 根据某些输入自动为此类数组生成代码?或者你的意思是你想用简单的方法和像数组{"a","b","c"}这样的输入在Java中生成这样的结果?

标签: java arrays


【解决方案1】:

所以你想要一组所有连续的串联字符串。

假设您的输入是一个字符串数组 s = {s0, s1, s2, ..., sn} 现在你的结果字符串数组 r 将包含 s 的所有元素。

r = s.copy()

现在你用 2 个字符串添加所有连续的连接

  for i = 0; i < n-1; i++;
    r.add(s[i] + s[i+1])

继续 3 个字符串的所有连续连接,最多 n 个字符串

【讨论】:

  • 如果我们给出 abcd = "a" "b" "c" "a b" "b c" "c d" "a b c" "b c d" "a b c d" 会产生这种情况
  • Welk 这是对生成该输出的实现的伪描述。你会是一个从 1-n(生成序列的长度)开始的 for 循环和一个内部循环 fork 0-(n-i) 有点改变你的值
【解决方案2】:

由于这看起来像家庭作业,我将尝试解释解决方案,但您是需要创建代码的人。


如果我们有类似的元素

a, b, c, d

使用 1 个元素的标记将是

a b c d 
^ ^ ^ ^

使用 2 个元素的标记将是

a b c d
^^^
  ^^^
    ^^^

使用 3 个元素的标记将是

a b c d
^^^^^
  ^^^^^

并且使用所有 4 个元素的标记将是

a b c d
^^^^^^^

因此,对于每个大小为 n 的标记,我们从 a、b 迭代,并将其下一个 n-1 元素添加到它。

因此,将生成所有长度为n 的标记的方法应该像这样工作:

  • 对于我们可以从中创建完整标记的所有元素(如果标记大小为 2,我们不能使用最后一个元素,如果它的大小是 3,我们不能使用最后 2 个元素,...)
    • 获取下一个 n-1 元素并将它们组合成单个令牌(在某个集合中收集该令牌,以便稍后返回)

假设这样的方法将被声明为List&lt;String&gt; generateTokens(String[] elements, int tokenSize)

案例

String[] elements = { "a", "b", "c", "d" };

我们需要调用它 4 次才能得到

generateTokens(elements, 1) // ["a", "b", "c", "d"]
generateTokens(elements, 2) // ["a b", "b c", "c d"]
generateTokens(elements, 3) // ["a b c", "b c d"]
generateTokens(elements, 4) // ["a b c d"]

因此,如您所见,您需要调用该方法x 次(其中x 是元素的数量)并将所有结果收集在一个地方。您可以通过简单的循环轻松实现。

【讨论】:

  • 是的,先生,这非常适合我的解决方案,请使用方法 generateTokens()
  • @MaqsoodHakro 抱歉,请阅读我回答的第一句话。尝试先实现它,当您遇到一些特定问题时,请随时询问(最好先搜索至少 15 分钟以上)。
  • @MaqsoodHakro 请同时阅读Open letter to students with homework problems
  • 我做不到,请做。这对我来说很重要,请帮助我。
  • 先生,我已经做到了。我学到了很多东西,我现在很高兴再次感谢您的激励先生。
【解决方案3】:

//只需要调用 possibleSetsOfString() 来生成可能的集合.. 它会在一个列表中为您提供可能的集合...

public String concitinate(String st, int start, int end) {

    int i = start;
    int j = end + 1;
    entities = new ArrayList<String>(Arrays.asList(st.trim().split("\\s+")));

    String p = "";
    String num = "";
    for (int k = i; k < j; k++) {

        p += entities.get(k) + " ";

        num += +k + ",";


    }
    numbers.add(num);




    p = p.replaceAll("( )+", " ");
    return p.trim();
}

public ArrayList<String> possibleSetsOfString(String txt) {
    ArrayList<String> mylist = new ArrayList<String>();
    lengthOfString = countWords(txt);

    int k = 0;
    // int j=0;
    for (int i = 0; i < lengthOfString; i++) {
        for (int j = 0; j < lengthOfString - k; j++) {
            String s = concitinate(txt, j, j + k);
            mylist.add(s);


        }
        k++;
    }




    // Collections.sort(mylist, Collections.reverseOrder());

    Collections.reverse(mylist);
    Collections.reverse(numbers);

    return mylist;

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 2022-12-07
    • 2018-06-29
    • 2021-04-14
    • 2017-11-23
    • 2018-04-11
    • 2020-06-23
    相关资源
    最近更新 更多