代码之家  ›  专栏  ›  技术社区  ›  thealchemist

对字符串使用一些特定的附加操作,检查它是否可以转换为其他字符串

  •  0
  • thealchemist  · 技术社区  · 7 年前

    给定两个字符串-初始字符串和目标字符串。然后,您的代码必须确定初始字符串是否可以通过在其上附加P或Q(重复)以某种方式转换为目标字符串。

    但是,要附加P或Q,必须遵循以下两条规则: 在末尾附加P 反转字符串并在末尾附加Q

    示例-

    示例:

    首字母:PQQ, 目标:PQQP,

    输出:true


    首字母:PQQ 目标:QQPPP

    输出:true


    首字母:P 目标:PQQQ

    输出:false

    我试图通过简单的递归来解决这个问题,但无法发现它适用于上述所有测试用例。我不知道我的方向是否正确。我欢迎所有的建议,请就此向我提出建议。以下是我的方法

    public class Convert {
    
         boolean isMatch(String s1 , String s2){
            if(s1.equals(s2))
                return true;
            String  s3 = s1.concat("P");
            StringBuilder input1 = new StringBuilder();
            input1.append(s1);
            String  s4 = input1.reverse().toString();
            s4 = s4.concat("Q");    
            return isMatch(s3, s2) || isMatch(s4,s2);   
        }
    
        public static void main(String[] args) {
    
            String s1 = "PQQ";
            String s2 = "PQQP";
            Convert c1 = new Convert();
            boolean res = c1.isMatch(s1, s2);
            System.out.println(res);
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   Stefan    7 年前

    你很接近。你只需要一个退出标准:

    if (s1.length() > s2.length())
        return false;
    

    把它放在下面

    if(s1.equals(s2))
            return true;
    

    如果s1比s2(目标字符串)长,请停止寻找解决方案,因为s1不可能通过添加更多内容而变为s2(它已经太长了)。

    没有退出标准,您将永远循环。例如“Aha,String PPPPP不等于String PP,让我们看看String PPPPPP或PPPPP q是不是”,等等。。。