那么你可以很容易地生成一个返回相同长度的CharSequence的实现,当被问及一个特定的字符时,返回一个长度为-1的数据。当然,toString()变成O(n)…
创建反转的CharSequence将是O(1) – 所有它需要做的是存储对原始CharSequence的引用。迭代序列中的所有字符都将是O(n),显然。
请注意,创建一个反转的CharSequence(根据您的问题的正文)与创建一个反转的String(根据您的问题的标题)不同。实际生成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();
}
}