java - 我的算法给我不正确的重复删除值有什么问题?
问题描述
我正在尝试删除字符串中的重复项,但我不确定为什么我的算法是错误的。它给了我一个输出,baa
而不是bans
正确的输出。
在尝试调试期间,我尝试将其切换i
到j
内部sb.deleteCharAt();
,但这给了我一个Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 5
错误。
我做错了什么,我该如何解决?
这是我的代码:
public static void removeDuplicate(String s) {
StringBuilder sb = new StringBuilder(s);
for(int i = 0; i < s.length(); i++) {
for(int j = i + 1; j < s.length(); j++) {
if(s.charAt(i) == s.charAt(j)) {
sb.deleteCharAt(i);
}
}
}
System.out.print("Duplicates have been, the resulting string is => " + sb);
}
public static void main(String[] args) {
String s = "bananas";
removeDuplicate(s);
}
解决方案
有几件事是错误的。您应该在循环中与字符串生成器进行比较,而不是与字符串本身进行比较,因为它会发生变化。其次,您在删除时使用了错误的索引。这是正确的程序:
public static void removeDuplicate(String s) {
StringBuilder sb = new StringBuilder(s);
for(int i = 0; i < sb.length(); i++) {
for(int j = i + 1; j < sb.length(); j++) {
if(sb.charAt(i) == sb.charAt(j)) {
sb.deleteCharAt(j);
}
}
}
System.out.print("Duplicates have been, the resulting string is => " + sb);
}
public static void main(String[] args) {
String s = "bananas";
removeDuplicate(s);
}
输出是:
重复了,结果字符串是 => bans
推荐阅读
- php - 目标类 [App\Http\Controllers\auth\ResetCandidatePasswordController] 不存在。部署到 nginx laravel 8 后
- angular - 使用 Tippy.js 在内容道具中使用指令或组件
- mysql - ER图,物理数据模型关系
- twitch - 您如何找出 twitch 流媒体正在使用哪些扩展程序?
- vb.net - 在 VB.net 中拟合数据
- python - 我想在子目录中运行 python 文件
- javascript - 无法获取和更改子元素
- c - 如何获取存储在 C 中 char * 下的多字节字符的 unicode 值?
- autodesk-forge - 如何将输入(文本框、滑块等)添加到 Autodesk Forge 查看器
- windows - 使用 CURL Windows 发布 json