从字符串中递归删除重复字符
我需要帮助来确定如何从字符串中删除重复字符。它必须完成递归这是真正的问题..从字符串中递归删除重复字符
public class FEQ2 {
/**
* @param args
*/
public static void removeDups(String s, int firstChar, int secondChar) {
if (s.length() == 1) {
System.out.println(s);
}
char a = s.charAt(firstChar);
if (a == s.charAt(secondChar)) {
s = a + s.substring(secondChar + 1);
}
System.out.println(s);
removeDups(s, firstChar + 1, secondChar + 1);
//return s;
}
public static void main(String[] args) {
//System.out.println(removeDups("AAAABBARRRCC", 1));
removeDups("AAAABBARRRCC", 0 , 1);
}
}
你可以这样说:
public static String removeDups(String s)
{
if (s.length() <= 1) return s;
if(s.substring(1,2).equals(s.substring(0,1))) return removeDups(s.substring(1));
else return s.substring(0,1) + removeDups(s.substring(1));
}
INPUT: "AAAABBARRRCC"
OUTPUT: "ABARC"
===============
编辑:另一种方式
public static String removeDups(String s)
{
if (s.length() <= 1) return s;
if(s.substring(1).contains(s.substring(0,1))) return removeDups(s.substring(1));
else return s.substring(0,1) + removeDups(s.substring(1));
}
INPUT: "AAAABBARRRCC"
OUTPUT: "BARC"
==============
编辑:3的方式
public static String removeDups(String s)
{
if (s.length() <= 1) return s;
if(s.substring(0,s.length()-1).contains(s.substring(s.length()-1,s.length()))) return removeDups(s.substring(0,s.length()-1));
else return removeDups(s.substring(0,s.length()-1)) + s.substring(s.length()-1,s.length());
}
INPUT: "AAAABBARRRCC"
OUTPUT: "ABRC"
提供家庭作业问题的解决方案是否明智?他们会学什么? – 2011-05-11 03:45:29
嗯,它没有被标记为家庭作业,当我回答它 – 2011-05-11 03:55:56
不适用于 - >“azxxzy”应该给 - >“ay” – AnujKu 2014-03-05 22:34:47
递归做事的一般技巧是把所有的变量,并把它们变成参数,并改变所有分配到函数调用。您可能需要不止一个功能更复杂的东西,但通常你可以把每个循环为tail-recursive功能很容易:
function(){
int i=0; int x=0; //initialize
while(condition){
x = x+i; //update
i = i+1;
}
return x;
}
成为
function(i,x){ //variables are now parameters
if(condition){
return x;
}else{
return function(i+1, x+i); //update
}
}
main(){
function(0,0); //initialize
======== =======
下面是一些重复删除代码,只是举例(它doesn't做同样的事情,你虽然)
removeDuplicates(str):
i = str.length-1; out_str = ""; chars_used = []
while(i >= 0):
c = str[i]
if(c not in chars_used):
chars_used.append(c)
out_str += c
i -= 1
return out_str
成为
remove_duplicates(str, i, out_str, chars_used):
if i < 0:
return out_str
else:
c = str[i]
if c in chars_used:
return remove_duplicates(str, i-1, out_str, chars_used)
else:
return remove_duplicates(str, i-1, out_str+c, chars_used+[c])
这能否帮助你?
public static String getUniqueChars(String realString) {
StringBuilder resultString = null;
try {
List<Character> characterArray = new <Character> ArrayList();
for(char c : realString.toCharArray()) {
characterArray.add(c);
}
resultString = new StringBuilder();
for(Character c : new TreeSet<Character>(characterArray)) {
resultString.append(c.charValue());
}
} catch (Exception e) {
e.printStackTrace();
}
resultString.toString();
}
private static String removeChars(String s) {
int n= s.length();
int i= 0;
int j= 1;
Map<Integer, Boolean> mark= new HashMap<>();
while(j<n) {
if(s.charAt(i)== s.charAt(j)) {
mark.put(i, true);
mark.put(j, true);
if(i== 0) {
i= j+1;
j= i+1;
} else {
i= i-1;
j= j+1;
}
} else {
i= j;
j= j+1;
}
}
String str= "";
for(int k= 0;k<n;k++) {
if(!mark.containsKey(k)) {
str+= s.charAt(k);
}
}
return str;
}
这是从家庭作业吗?如果是这样,你能否复制确切的问题? – 2011-05-11 02:48:25
你能说什么是预期的结果? ABARC或ABRC?如果它是作业 - 是否有限制,使用什么和不是什么? – 2011-05-11 03:20:08