上)???有人可以告诉我.reverse

时间:2016-01-20 18:56:18

标签: java string big-o stringbuffer

说我使用以下方法搜索回文。我知道第一个是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());

}

2 个答案:

答案 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;。但是,只有在你的表现胜过所有其他计算时,这才有意义。