假设我输入的字符串为“aaabbaccd”。我需要设计一个程序,从我的输出中删除所有相邻的重复项。以上面的字符串为例,输出结果如下: 1.删除相邻重复项后我得到的第一个输出是“aad”(从我的输入中删除了aabbcc)。 2.在第二遍中,它将从我的字符串中删除aa并将输出设为“d”。
到目前为止,我可以设计以下代码:
String input="aaabbaccd";
String[] arr=input.split("");
int n=arr.length;
for(int i=0;i<n;i++) {
if(i==arr.length-1) {
if(arr[i-1].equals(arr[i])) {
break;
}
else {
System.out.print(arr[i]+ "");
break;
}
}
if(arr[i].equals(arr[i+1])) {
i=i+1;
continue;
}
if(!arr[i].equals(arr[i+1])) {
System.out.print(arr[i]+ "");
}
}
此代码的问题在于它将输出作为aad。我无法理解如何对我的代码进行第二次传递。也许递归是我需要在这段代码中实现的东西。请帮我看看如何在这段代码中实现递归。
答案 0 :(得分:0)
一个懒惰的替代方法是使用regexp,其中@csrf_exempt
def rq_create_account_json(request):
if request.is_ajax():
if request.method == 'POST':
json_data = json.loads(request.body)
print(json_data)
return JsonResponse(json_data)
return HttpResponse("Error")
部分匹配任何字符并保存它,(.)
引用返回该匹配。我添加了递归以继续应用删除,直到字符串不再被修改:
\\1
行为已通过以下方式验证:
public String removeDuplicates(String original)
{
String reduced = original.replaceAll("(.)\\1", "");
if(reduced.equals(original))
// No more duplicates, return original string
return original;
else
// Duplicates were removed, continue recursion...
return removeDuplicates(reduced);
}
答案 1 :(得分:0)
public static void main(String[] args) {
String input="aaabbaccd";
removeDupe(input);
}
public static void removeDupe(String input) {
String[] arr=input.split("");
StringBuffer sb=new StringBuffer();
int n=arr.length;
for(int i=0;i<n;i++) {
if(i==arr.length-1) {
if(arr.length==1) {
sb.append(arr[i]);
break;
}
if(arr[i-1].equals(arr[i])) {
break;
}
else {
sb.append(arr[i]);
break;
}
}
if(arr[i].equals(arr[i+1])) {
i=i+1;
continue;
}
if(!arr[i].equals(arr[i+1])) {
sb.append(arr[i]);
}
}
//System.out.println(sb);
if(sb.toString().equals(input)) {
System.out.println(sb);
}
else {
removeDupe(sb.toString());
}
}
答案 2 :(得分:0)
以下一个班轮怎么样?
(new LinkedHashSet<Character>("aaabbaccd".chars().mapToObj(i -> (char)i).collect(Collectors.toList()))).stream().map(e -> e.toString()).collect(Collectors.joining());
答案 3 :(得分:0)
我使用StringBuilder类来存储字符串,并使用StringBuilder的replace()
方法来删除Adjacent char。
此声明:str.replace(i,i+2,"")
实际上 删除 相邻的字符。
核心逻辑是用名为remove()
的静态方法编写的。注意我不止一次调用remove()
方法,即str.length()/ 2次。因为要删除每次调用remove()
后我们得到的新字符串中的相邻对。
public class RemoveDupl12{
public static StringBuilder remove(StringBuilder str){
for( int i=0; i<str.length()-1; i++ )
{
if(str.charAt(i)==str.charAt(i+1))
{
str.replace(i,i+2,"");
i++;
}
}
return str;
}
public static void main(String[] args) {
StringBuilder str=new StringBuilder("daaabbad");
for(int i=str.length()/2;i>0;i--)
str=remove(str);
if(str.length()==0)
System.out.println("Final output=empty string"+str);
else
System.out.println("Final output="+str);
}}