将字符串的反向字与原始字符串Java进行比较

时间:2014-08-07 07:44:58

标签: java arrays string

这是我提出的解决方案:

public void reverse(String str1, String str2){
int j = str2.length() - 1; 

if(str1.length() != str2.length()) 
{ 
    return false; 
} 
else 
{ 
    for(int i = 0; i < str1.length(); i++) 
    { 
       if((str1.charAt(i) == str2.charAt(j)) && j >=0) 
       {     
          j--; 
       } 
       else 
       { 
          return false; 
       } 
    } 
} 
  return true; 
}

我看到过其他解决方案 1.使用toCharArray()和Arrays.sort(内容) 2.使用两个数组(每个字符串一个)计算字符出现次数的算法&lt; - 我认为这个解决方案是不准确的,因为反向字符串可能与原始字符串具有相同数量的字符但不是反转原始字符串。即word = / = dorw

哪种解决方案具有最好的O符号? Arrays.sort(内容)做了什么?

5 个答案:

答案 0 :(得分:3)

我认为最好的解决方案是反转str2并使用字符串的equals方法来比较两个字符串:

public boolean reverse(String str1, String str2){
   return str1.equals(new StringBuilder(str2).reverse().toString())
}

答案 1 :(得分:0)

如果您的方法无效,则返回false或true没有多大意义。你的方法应该是公共布尔反向(..)。

对于代码,我认为这更快(如果我理解你的问题)。

String reverse = new StringBuffer(str2).reverse().toString();
return reverse.equals(str1);

答案 2 :(得分:0)

最好的方法是在O(n)中。好像你那样做了。一边走一边走一边比较字符,如果它们不相等,则返回false。如果它使它到字符串的末尾返回true。

//Assuming you checked the length
for(int i = 0; i< str1.length();i++){
   if(str1[i] != str2[str2.length-i-1]
       return false;
} 
return true;

我没有测试它但它应该可以工作。

答案 3 :(得分:0)

您不需要使用排序算法。您的第一个解决方案具有O(n)复杂度,并且在Arrays.sort()中实现的排序算法具有o(nlog(n))。

答案 4 :(得分:0)

这听起来像是对回文的测试,它与原来的反面相反?&#34;。为此,您不需要反转字符串,因此您只有一个参数:

public static boolean isPalindrome(String str)
{
  int len = str.length();
  int max = len/2;
  for(int i=0; i < max; i++)
    if(str.charAt(i) != str.charAt(len - i - 1))
      return false;
  return true;
}

要注意的关键点是你不需要比较一半的字符串(向下舍入)。