递归删除相邻的重复字符并返回结果字符串

时间:2014-04-08 20:33:13

标签: java algorithm

给定一个字符串,完成给定的函数以递归方式删除相邻的重复字符并返回结果字符串。如果结果字符串中没有剩余字符,则返回" -1" (没有引号)。

Sample Test Cases
Sample Input: ABCCBCBA
Output: ACBA

Explanation: (ABCCBCBA --> ABBCBA --> ACBA)
Sample Input: AA
Sample Output: -1
Explanation: Return -1, since there are no characters in the final string

我的解决方案在-1情况下失败

public String removeAdj( String src)
{
    if(src == null)
         return null;

    if(src.length() ==1)
        return src;



     String result;

     if(src.CharAt(0) == src.charAt(1) )
          return removeAdj(src.SubString(1) );
     else
          result = src.CharAt(0) + removeAdj(src.SubString(1) );

     return result;
}

2 个答案:

答案 0 :(得分:1)

我不会为此使用递归解决方案。

public String removeAdj(String src) {
   int i = 0;
   while (i < src.length() - 1) {
       int j = i;
       while (j < src.length() - 1 && src.charAt(i) == src.charAt(j + 1)) {
           j++;
       }
       if (j > i) {
           src = src.substring(0, i) + src.substring(j + 1, src.length());
           i--;
       } else {
           i++;
       }
   }
   if (i < 1) {
       return "-1";
   } else {
       return src;
   }
}

请注意,此解决方案会删除两个以上重复字符的子字符串,例如AAA,但如果您不需要,则可以轻松简化。

答案 1 :(得分:0)

我不确定是什么问题。如果String的长度为1个字符,则返回-1,而不是src。

这是你的解决方案吗?