这是我的代码:
public static String removeAdjDuplicates(String s) {
if(s == "" || s == null || s.isEmpty())
return s;
if(s.length() < 2)
return s;
if(s.charAt(0) != s.charAt(1))
s = s.charAt(0) + removeAdjDuplicates(s.substring(1));
if(s.charAt(0) == s.charAt(1)) //line 37
return removeAdjDuplicates(s.substring(2));
return s;
}
输入字符串“ull”时,出现以下错误:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
at java.lang.String.charAt(String.java:658)
at GFG.removeAdjDuplicates(File.java:37)
at GFG.main(File.java:16)
我阅读并尝试了类似问题的答案,但我不确定出了什么问题。
最佳答案
从您收到的异常来看,removeAdjDuplicates
返回一个空字符串,使所有超过零的索引无效。
尽管您的代码在顶部执行长度检查,但当两个初始字符不同时,它也会执行此分配:
s = s.charAt(0) + removeAdjDuplicates(s.substring(1));
这意味着,如果 removeAdjDuplicates
返回空字符串,则 s
可以变成单字符字符串。
关于java - 删除相邻重复字母时的 StringIndexOutOfBounds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41477037/