说我使用以下方法搜索回文。我知道第一个是O(n),因为它遍历整个字符串。 StringBuffer中的.reverse()也是O(n)吗?我并不担心找到一个更好的问题方法我试图理解反向方法是否物理地反转字符串或者它是否比那更有效?感谢
public static boolean isAPalindrome(String s1){
String tmp = "";
int length = s1.length();
for(int i = 0; i < s1.length(); i++){
tmp += s1.charAt(s1.length()-i-1);
}
if (s1.equals(tmp)) return true;
return false;
}
public static boolean isAPalindrome(String s1){
StringBuffer a = new StringBuffer(s1);
return s1.equals(a.reverse().toString());
}
答案 0 :(得分:0)
反转字符串的速度不能快于 O(n)
(在字符串的普通表示下)。
你必须&#34;操作&#34;在字符串的每个字符上,所以它理论上 比这更快。
StringBuffer
扩展AbstractStringBuilder
,实现reverse
。您可以自己查看源代码here。
注意:这是不表示StringBuilder
/ Buffer
s reverse
将以 运行您将编写的O(n)
reverse
方法。它可能会更快地运行 。但是渐近它仍然是 O(n)
。
答案 1 :(得分:0)
你可以实现一个有效o(1)的反向,但不能实现典型的字符串类:你可以通过实现一个带有方向成员的字符串类来实现,它可以取值&#34; forward&#34 ;或者&#34;落后&#34;。但是,只有在你的表现胜过所有其他计算时,这才有意义。