繁体   English   中英

将字符串的反向单词与原始字符串Java比较

[英]Comparing the reverse word of a string to the original string Java

这是我想出的解决方案:

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(content)。2.使用两个数组(每个字符串一个)来计算字符出现次数的算法。不正确,因为反转的字符串可能与原始字符串具有相同数量的字符,但不是原始字符串的反向字符。 即词= / = dorw

以下哪种解决方案具有最佳的O标记? Arrays.sort(content)的作用是什么?

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

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

如果您的方法无效,则返回false或true没有多大意义。 您的方法可能应该是public boolean reverse(..)。

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

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

最好的方法是在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;

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

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

听起来像是对回文的检验,这是“与原始结果相反吗?”。 为此,您不需要反转字符串,因此只有一个参数:

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

需要注意的关键是,您不需要比较字符串的一半以上(四舍五入)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM