使用递归来测试两个字符串是否相同但是相反

时间:2016-11-02 19:50:31

标签: java string recursion

对于我的作业,我必须使用递归来测试两个字符串是否相同但是相反。

以下是实际问题:

编写一个名为isStringReversed的递归方法,给定两个String参数,如果两个字符串包含相同的字符序列,但顺序相反(忽略大小写),则返回true,否则返回false。例如,isStringReversed("钢琴"," oNaIp")将返回true。注意:null(空)字符串和一个字母的字符串都是相反的。

这是我所做的,但是当我执行该程序时, 始终 获取 错误的回报。继承我的代码:

public static boolean isStringReversed(String s1, String s2) {
    if (s1 == null || s2 == null || s1.length() == 1 || s2.length() == 1) {
        return true;
    }else if (s1.length() != s2.length()) {
        return false;
    }else {
        char s1first = Character.toLowerCase(s1.charAt(0));
        char s2last = Character.toLowerCase(s2.charAt(s2.length() - 1));

        if (s1first == s2last){
            String s1shorter = s1.substring(0, s1.length() - 1);
            String s2shorter = s2.substring(0, s2.length() - 1);
            return isStringReversed(s1shorter, s2shorter);
        }else {
            return false;
        } 
    }
}

3 个答案:

答案 0 :(得分:3)

substring上执行s1first时,您应该删除第一个字符,而不是最后一个字符。

只比上面一行,比较s1first第一个字符和s2last最后字符。所以一旦你确定它们是平等的,那就是你删除的内容并继续递归。

答案 1 :(得分:1)

而不是

    String slshorter = sl.substring(0, s1.1ength() - l) ;
    String s2shorter = s2.substring(0, s2.1ength() - l) ;

使用

    String slshorter = sl.substring(1) ;
    String s2shorter = s2.substring(0, s2.1ength() - 1) ;

请注意,方法substring()的第二个参数表示该指数独占

答案 2 :(得分:-1)

这是递归的想法

        public static bool isStringReversed(string input1, string input2)
        {
            string s1 = input1.ToLower();
            string s2 = input2.ToLower();

            if(s1 == null && s2 == null) 
                return true;
            if (s1.Length == 1 && s2.Length == 1)
            {
                if (s1 == s2)
                    return true;
                return false;
            }

            if (s1.Length != s2.Length)
                return false;

            return isStringReversedRec(s1, s2, s1.Length - 1, 0);

        }

        private static bool isStringReversedRec(string s1, string s2, int indexS1, int indexS2)
        {
            if (indexS1 < 0)
                return true;

            if (s1.charAt(indexS1) != s2.charAt(indexS2))
                return false;

            return isStringReversedRec(s1, s2, indexS1 - 1, indexS2 + 1);
        }