子串和置换的空字符串考虑

时间:2013-06-26 00:47:55

标签: java

我想知道如何做出以下决定?

一种。空字符串被认为是以下的子字符串:

  1. 另一个空字符串
  2. 非空字符串
  3. B中。空字符串被认为是:

    的排列
    1. 另一个空字符串

4 个答案:

答案 0 :(得分:2)

您可以使用contains自己测试前两个:

/* 1 */ System.out.println("".contains(""));
/* 2 */ System.out.println("abc".contains(""));
true
true

关于你的上一个问题,似乎类似于要求空集的排列有多少?,答案是0! = 1 - 即是,空集是一个自身的排列,因此在数学意义上,空字符串可以被认为是自身的排列。

答案 1 :(得分:1)

  1. 我不知道你想要置换的实现是什么,但总的来说,是的,基于empty是空子集的事实,你应该期望空字符串是另一个空字符串的有效排列。

    String foo = "hello!";
    String bar = "world";
    String baz = "";
    String qux = "wor";
    String ipsem = "";
    
    System.out.println(foo.contains(bar));               //false
    System.out.println(foo.contains(baz));               //true
    System.out.println(baz.contains(foo));               //false
    System.out.println(bar.contains(qux));               //true
    System.out.println(baz.contains(ipsem));             //true
    

答案 2 :(得分:1)

使用Junit编写一些真正的测试!

另外要小心interned Strings,最后一次测试isNotConsideredIdenticalVariable需要一个停止编译器优化的技巧(即自动实习)。

import org.junit.Assert;
import org.junit.Test;


public class EmptyStringTest {

    @Test
    public void isConsideredSubstringOfEmpty() throws Exception
    {
        Assert.assertTrue("".contains(""));
    }


    @Test
    public void isConsideredSubstringOfNonEmpty() throws Exception
    {
        Assert.assertTrue("NOT EMPTY".contains(""));
    }


    @Test
    public void isConsideredEqual() throws Exception
    {
        Assert.assertEquals("", "");
    }


    @Test
    public void isConsideredIdenticalLiteral() throws Exception
    {
        Assert.assertTrue("" == "");
    }


    @Test
    public void isNotConsideredIdenticalVariable() throws Exception
    {
        String firstInstance = "a".replaceAll("a", "");
        String differentInstance = "";
        Assert.assertFalse(differentInstance == firstInstance);
    }
}

答案 3 :(得分:1)

由于您使用标记“java”来询问此问题,我假设您指的是String类型。

Java空String 可以被视为另一个空或非空String的子字符串......在某种意义上它可以使用String.substring()生成。 (并非所有空的String实例都可以通过这种方式生成,但如果您使用equals比较字符串,那就不相关......)

Java String API未定义permute操作。这意味着我们不能说它是如何表现的。问题的第二部分是无法回答的。


如果你在谈论字符串是什么的其他模型,那么答案取决于完全在模型上。

如果您(实际上)就如何建模字符串提出建议......那么我认为您的问题无法回答。同样,Answers将取决于您如何定义字符串模型的 rest

但如果您需要我的建议,那么您需要考虑如何使用字符串模型。字符串的子串集合包含原始字符串是否有用?对于包含原始字符串的字符串排列集是否有用?有什么逻辑后果......

最后,this Wikipedia page包括字符串的“形式理论”。对于我的非数学家来说,它看起来不错,但该页面并未引用任何与正式理论部分相关的参考文献。