当前位置: 首页 > 面试题库 >

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

阚英武
2023-03-14
问题内容

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

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

谢谢

更新 嘿,大多数人认为这个“不可能”的好家伙有点可笑!好吧,实际上(从概念上来说)是微不足道的-伪java可以很清楚地说明这一点:

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的解决方案),并且有人对此有所了解。(再次,由于那些讨厌的代码点,这种可能性很小)。

编辑 可能是因为我的标题中带有“ string”(而不是String!)引起了混乱,而我只要求“
CharSequence的反向字符”。如果您感到困惑,对不起。我希望O(1)部分能够清楚说明所要的内容。


问题答案:

好的,您可以轻松地生成一个实现,CharSequence该实现返回相同的长度,当要求输入特定字符时,返回length- index-1toString()变成O(n)当然…

创建
相反的对象CharSequence将是O(1)-毕竟要做的就是存储对原始的引用CharSequence。显然,对序列中的所有字符进行迭代将是O(n)。

请注意,创建反向CharSequence(根据问题的正文)与创建反向(根据问题的 标题并不
相同。实际生成String是O(n),并且必须是。String __

示例代码,大多数未经测试:

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();
    }
}


 类似资料:
  • 问题内容: 我保存在一个名为的String变量中。 我需要打印,但是要反转。 我怎样才能做到这一点?我知道Java中已经内置了某种功能。 问题答案: 你可以使用此: 或者,对于JDK 1.5之前的版本,请使用代替-它们具有相同的。感谢评论员指出,如今在没有并发问题的情况下,这是首选方法。

  • 本文向大家介绍在JavaScript中反转字符串中的单词,包括了在JavaScript中反转字符串中的单词的使用技巧和注意事项,需要的朋友参考一下 问题 我们需要编写一个JavaScript函数,该函数接受代表一个句子的字符串。 我们的函数应该颠倒字符串中出现的单词的顺序,并返回新的字符串。 这意味着最后一个单词应该成为第一个,第二个最后一个应该成为第二个,依此类推。 示例 以下是代码- 输出结果

  • 问题内容: Python的str对象没有内置的反向函数。实现这种方法的最佳方法是什么? 如果提供一个非常简洁的答案,请详细说明其效率。例如,str对象是否转换为其他对象等。 问题答案: 怎么样: 这是扩展切片语法。它的工作方式是通过保留和并指定步骤来反转字符串。

  • 考虑这个例子,从0到10颠倒数字的顺序:<代码> 这以一种双重的方式颠倒了顺序。如果我输入100个从0到10的数字,它包含a 对于字典顺序,我需要同样的东西。我有一根固定长度为10的绳子。如何颠倒字典顺序? 如果它只包含,这将非常简单。但是它也可以包含数字和,并且区分大小写。 有人知道怎么做吗?

  • 问题内容: 我的代码中有一个小问题。我正在尝试反转单词和字符串的字符。例如,“狗跑了”将变成“ ehT神纳尔” 该代码几乎可以正常工作。它只是不添加空格。你会怎么做? 问题答案: 您走在正确的轨道上。主要问题是一个空字符串,而不是一个空格(即使您解决了这个问题,您可能也不想在最后一个单词之后留一个空格)。 这是您可以更简洁地执行此操作的方法: