语言:Java 注意事项:*需要使用For循环或While循环遍历String *它删除了String的重复字母,并返回没有dupilcates的单词。
例如:字符串是HELLO - 然后该方法循环并删除任何重复项,在本例中为“L”并在最后返回HELO
我到目前为止
private String removeAnyDuplicates(String userWord)
{
//Code goes here?
return "" ; // Need to return the new string
}
答案 0 :(得分:1)
您可以使用regular expressions执行此操作。 e.g:
private static final Pattern REGEX_PATTERN =
Pattern.compile("(.)\\1*");
public static void main(String[] args) {
String input = "HELLO, AABBCC";
System.out.println(
REGEX_PATTERN.matcher(input).replaceAll("$1")
); // prints "HELO, ABC"
}
答案 1 :(得分:1)
我假设删除重复项意味着结果最多只包含一个任何字符。 (其他一些答案假设相邻的重复项只需要减少到单次出现。)基本算法将是:
一个天真(效率很低)的实现将是:
private String removeAnyDuplicates(String userWord)
{
String result = "";
for (int i = 0; i < userWord.length(); ++i) {
char c = result.charAt(i);
if (result.indexOf(c) < 0) {
// negative index indicates not present
result += String.valueOf(c);
}
}
return result;
}
这有两个主要的低效率来源:它创建了许多中间String
对象,并且它必须扫描输入的每个字符到目前为止的整个结果。这些问题可以通过使用其他内置Java类来解决 - StringBuilder
可以更有效地累积结果,Set
实现可以有效地记录和测试已经看到的字符:
private String removeAnyDuplicates(String userWord)
{
int len = userWord.length();
StringBuilder result = new StringBuilder(len);
Set<Character> unique = new HashSet<Character>();
for (int i = 0; i < len; ++i) {
char c = result.charAt(i);
// try to add c to set of unique characters
if (unique.add(c)) {
// if it succeeds, this is the first time seeing c
result.append(c);
}
}
return result.toString();
}
答案 2 :(得分:0)
private String removeAnyDuplicates(String userWord)
{
CharSequence inputStr = userWord;
int length = inputStr.length();
Set<Character> uniqueChars = new HashSet<Character>();
for(int i=0; i < length; ++i) {
uniqueChars.add(inputStr.charAt(i));
}
return uniqueChars.size() >= 3;
}
查看此answer
答案 3 :(得分:0)
将字符串转换为char数组,并将其存储在LinkedHashSet中。这将保留您的订购,并删除重复。
像这样:
private static String removeAnyDuplicates(String userWord)
{
char[] chars = userWord.toCharArray();
Set<Character> charSet = new LinkedHashSet<Character>();
for (char c : chars) {
charSet.add(c);
}
StringBuilder sb = new StringBuilder();
for (Character character : charSet) {
sb.append(character);
}
return sb.toString();
}
记住:
import java.util.LinkedHashSet;
import java.util.Set;
答案 4 :(得分:0)
试试这个衬垫:
private String removeAnyDuplicates(String userWord) {
return userWord.replaceAll("(.)\\1+", "$1");
}
这使用正则表达式来查找重复的(2个或更多)字母,并用单个字母实例替换它们。
目前还不清楚“重复”是否意味着立即之后 之后。对于任何地方,请使用:
private String removeAnyDuplicates(String userWord) {
return userWord.replaceAll("(.)(?=.*\\1)", "");
}
答案 5 :(得分:0)
你可以试试这个
public static void main(String args[]){
System.out.println(removeAnyDuplicates("HELLO"));
}
private static String removeAnyDuplicates(String userWord)
{
char[] arr=userWord.toCharArray();
List<String> list=new ArrayList<>();
for(int i=0;i<arr.length;i++){
if(!list.contains(String.valueOf(arr[i]))){
list.add(String.valueOf(arr[i]));
}
}
return list.toString().replaceAll("\\[|\\]|\\,","") ;
}