检查字符串A是否可以从字符串B字符创建(abbcccd是从abcd派生的)?

时间:2014-06-03 12:11:02

标签: java recursion

我正在尝试编写一个递归方法,检查所有字符串A唯一字符是否为字符串B的子集。

示例:

  • 字符串A =“a”

    1. isTrans(A,“a”)== true
    2. isTrans(A,“aa”)== true
    3. isTrans(A,“aaa”)== true
    4. isTrans(A,“aab”)== false
  • 字符串A =“acd”

    1. isTrans(A,“addbc”)== false
    2. isTrans(A,“aacdd”)== true
    3. isTrans(A,“acccd”)== true
    4. isTrans(A,“aaaccdd”)== true

这是我的代码:

public static boolean isTrans(String s,String t)
{
    boolean isT=false;
    if(t.length()>1)
    {
        if(s.substring(0,1).equals(t.substring(0,1))&&(t.substring(0,1)!=t.substring(1,2)))
        {
            return isTrans(s.substring(1,s.length()),t.substring(1,t.length()));
        }
        if((s.substring(0,1)).equals(t.substring(0,1))&&((t.substring(0,1)).equals(t.substring(1,2))))
        {
            return isTrans(s,t.substring(1,t.length()));
        }
    }
    else
    {
        isT =(s.substring(0,1).equals(t.substring(0,1)))?true:false;
    }
    return isT;
}

2 个答案:

答案 0 :(得分:0)

您可以借助正则表达式实现此目的。

试试这个:

    String s = "a";
    String t1 = "aa";
    String t2 = "aab";

    System.out.println("t1->" + t1.replaceAll("(.+?)\\1+", "$1").equals(s));
    System.out.println("t2->" + t2.replaceAll("(.+?)\\1+", "$1").equals(s));

    s = "acd";
    t1="addc";
    t2 = "aaaccddd";

    System.out.println("t1->" + t1.replaceAll("(.+?)\\1+", "$1").equals(s));
    System.out.println("t2->" + t2.replaceAll("(.+?)\\1+", "$1").equals(s));

希望它有所帮助。

答案 1 :(得分:0)

您需要更正

t.substring(0,1)!=t.substring(1,2)

==和!=运算符不像字符串类型那样对字符串起作用。 你可以用

之类的东西替换它
!t.substring(0,1).equals(t.substring(1,2))

但更好的方法是直接检查字符。

尝试我修改的以下代码段,用charAt替换substring。

public static boolean isTrans(String s, String t) {
    System.out.println(s + " - " + t);
    boolean isT = false;

    if (t.length() > 1) {

        if (s.charAt(0) == t.charAt(0) && (t.charAt(0) != t.charAt(1))) {
            return isTrans(s.substring(1, s.length()), t.substring(1, t.length()));
        }
        if (s.charAt(0) == t.charAt(0) && t.charAt(0) == t.charAt(1)) {
            return isTrans(s, t.substring(1, t.length()));
        }
    } else {
        isT = (s.charAt(0) == t.charAt(0)) ? true : false;
    }

    return isT;
}