2

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

A. 空字符串是否被视为以下内容的子字符串:

  1. 另一个空字符串
  2. 非空字符串

B. 空字符串是否被认为是以下的排列:

  1. 另一个空字符串
4

4 回答 4

2

您可以自己测试前两个contains

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

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

于 2013-06-26T00:56:42.167 回答
1
  1. 是的。
  2. 是的。

我不知道您想到的置换实现是什么,但总的来说,是的,基于空是空的子集这一事实,您应该期望空字符串是另一个空字符串的有效置换。

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
于 2013-06-26T01:00:03.820 回答
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);
    }
}
于 2013-06-26T01:00:31.600 回答
1

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

Java 空String 可以被认为是另一个空或非空 String ... 的子字符串,因为它可以使用String.substring(). (并非所有空字符串实例都可以通过这种方式生成,但如果您使用 比较字符串equals,则不相关......)

Java StringAPI 没有定义permute操作。这意味着我们无法说出它的行为方式。问题的第二部分无法回答。


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

如果您(实际上)接受有关如何为字符串建模的建议……那么我认为您的问题无法回答。同样,答案将取决于您如何定义字符串模型的其余部分。

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

最后,这个 Wikipedia 页面包含了字符串的“形式理论”。在我非数学家的眼中,它看起来不错,但该页面没有引用任何似乎与形式理论部分相关的参考资料。

于 2013-06-26T01:01:52.297 回答