【问题标题】:Comparing the reverse word of a string to the original string Java将字符串的反向单词与原始字符串 Java 进行比较
【发布时间】:2014-08-07 16:01:54
【问题描述】:

这是我想出的解决方案:

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.使用两个数组(每个字符串一个)计算字符出现次数的算法

这些解决方案中哪个具有最佳 O 表示法? Arrays.sort(content) 是做什么的?

【问题讨论】:

  • 我不明白。两个字符串参数是什么?一个是原始的,一个是预反转的字符串?这是回文测试吗?
  • 检查一个词是不是另一个词的排列
  • 标题说“比较一个单词的反面和原文”。所以暗示只涉及一个词。
  • 或许可以添加一些例子。

标签: java arrays string


【解决方案1】:

我认为最好的解决办法是把str2倒过来,用字符串的euals方法来比较两个字符串:

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

【讨论】:

  • 知道了!但是,如果我们获得了一个无法使用内置函数的额外约束,那么我上面的做法或@carboncomputed 所说的方式是最好的方式吗?
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-02-20
          • 2010-10-06
          • 1970-01-01
          • 2012-08-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多