Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 递归地删除相邻的重复字符并返回结果字符串_Java_Algorithm - Fatal编程技术网

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

Java 递归地删除相邻的重复字符并返回结果字符串,java,algorithm,Java,Algorithm,给定一个字符串,完成给定函数以递归方式删除相邻的重复字符并返回结果字符串。如果结果字符串中没有剩余字符,则返回“-1”(不带引号) 我的解决方案在-1案例中失败 public String removeAdj( String src) { if(src == null) return null; if(src.length() ==1) return src; String result; if(src.CharAt

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

我的解决方案在-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;
}

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


这是您的解决方案吗?

对此,我不会使用递归解决方案

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;
   }
}
publicstringremoveadj(stringsrc){
int i=0;
而(ii){
src=src.substring(0,i)+src.substring(j+1,src.length());
我--;
}否则{
i++;
}
}
if(i<1){
返回“-1”;
}否则{
返回src;
}
}

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

我尝试了您的代码,以防AA输入它,给出A您使用的测试用例是什么?还有,你有没有仔细检查并发现任何问题?ABCCBCBA--O/p->ABCBCBA进入这个网站,只需粘贴你的代码是的,它给出了一个我想得到的答案-1除非你有一些解决方案,否则不要讨论这个问题并给出答案。问题和类似问题应作为对原始问题的评论而提出!您的建议不是一个好建议,因为函数返回类型是
string
.omg,然后返回“-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;
   }
}