gpt4 book ai didi

java - 在 O(1) 中反转 Java 中的字符串?

转载 作者:IT老高 更新时间:2023-10-28 20:56:38 24 4
gpt4 key购买 nike

在给定 CharSequence 的情况下,标准 Java 库中是否有任何工具可以在 O(1) 时间内产生相反的结果?

我想这很容易实现,只是想知道它是否已经存在。 (我怀疑不提供此功能的原因是因为“简单”的方式实际上会破坏多字符代码点 - 但在许多情况下,我们知道我们没有处理这些代码点。

谢谢

更新呵呵,大多数人都认为这是“不可能的”,这有点有趣,伙计们!好吧,实际上它(在概念上)是微不足道的——为了清楚起见,pseudojava 如下:

class MyReverseString extends String { //of course I can't extend String!
final String delegate;
MyReverseString(String delegate) { this.delegate = delegate; }

int length() { return delegate.length(); }

int charAt(int i) { return delegate.charAt(delegate.length() - 1 - i); }
}

我将这个问题留待更多,只是在极少数情况下,JDK 中已经存在类似显而易见的解决方案(例如,参见 Jon Skeet 的解决方案)并且有人知道它。 (同样,由于那些讨厌的代码点,可能性很小)。

编辑 可能混淆来自于我在标题中有“字符串”(但不是字符串!),而我只要求“CharSequence 的反面”。如果您感到困惑,对不起。我希望 O(1) 部分能够准确地说明所要求的内容。

顺便说一句,this was the question that made me ask this one . (在这种情况下,从右到左而不是从左到右运行正则表达式会更容易,因此即使对于简单/损坏的代码点实现也可能有一些实用值(value))

最佳答案

嗯,你可以很容易地产生一个 CharSequence 的实现,它返回相同的长度,当被要求输入一个特定的字符时,返回 length-index-1 处的那个。 toString() 当然变成 O(n)...

创建 反转 CharSequence 将是 O(1) - 它所要做的就是存储对原始 CharSequence 的引用,之后全部。显然,迭代序列中的所有字符将是 O(n)。

请注意,创建反向 CharSequence(根据您的问题的正文)与创建反向 String(如根据您问题的标题)。实际上产生字符串是 O(n),而且必须是。

示例代码,大部分未经测试:

public final class ReverseCharSequence implements CharSequence
{
private final CharSequence original;

public ReverseCharSequence(CharSequence original)
{
this.original = original;
}

public int length()
{
return original.length();
}

public char charAt(int index)
{
return original.charAt(original.length() - index - 1);
}

public CharSequence subSequence(int start, int end)
{
int originalEnd = original.length() - start;
int originalStart = original.length() - end;
return new ReverseCharSequence(
original.subSequence(originalStart, originalEnd));
}

public String toString()
{
return new StringBuilder(this).toString();
}
}

关于java - 在 O(1) 中反转 Java 中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3109914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com