[英]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.