首页 > 试题广场 >

字符串连连看

[编程题]字符串连连看
  • 热度指数:1442 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解
对于输入的字符串,从左到右扫描字符串,如果存在由三个以上(包括三个)连续相同字符组成的子串,就将这个子串从原串中去掉,并将原有字符串剩下的部分拼接到一起。重复上述过程,直到无法去掉任何子串

输入描述:
输入的字符串


输出描述:
最后剩下的子串
示例1

输入

AAABCCDDDCB

输出

BB
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        String s=sc.next();
        int count=1;
        for(int i=1;i<s.length();i++){
            if(s.charAt(i)==s.charAt(i-1)){
                count++;
                if(i==s.length()-1&&count>=3){
                    s=s.substring(0,i-2);
                    count=0;
                    i=0;
                }
                continue;
            }
            if(count>=3){
                //很奇怪不是减count个,而是-3个,估计是题目的问题吧。。。
                s=s.substring(0,i-3)+s.substring(i);
                i=0;
            }
            count=1;
        }
        System.out.println(s);
    }
}

发表于 2019-06-17 21:00:18 回复(1)

这题难道没错?它说三个以及三个以上的重复字符,可解题的时候只包括了三个的重复字符啊
发表于 2019-03-10 21:32:25 回复(2)
测试用例有问题:
用例输入:AAABBBAAABBBAAAABBBAABBBAAAABBBBA
给的测试用例输出是:ABA
然而按照题目的要求,3个(及以上)连续相同删除,删除后再判断。
那么得到的输出应该是 A
#include<stdio.h>
int main()
{
    char s[100];
    char temp=1;
    int i=0;
    while(scanf("%c",&s[i])!=EOF)
    {
        if(temp==s[i])
            continue;
        else
        {
            temp=1;
            if(i>=2&&s[i]==s[i-1]&&s[i]==s[i-2])    //如果有3个连续相同
            {
                temp=s[i];
                i=i-2;
            }
             else
                 i++;
        }
    }
    for(int k=0;k<i;k++)
        printf("%c",s[k]);
    return 0;
}
发表于 2020-09-10 17:53:24 回复(0)
s=input()
while 1:
    flag = 0
    for i in range(0, len(s) - 2):
        if s[i] == s[i + 1] == s[i + 2]:
            s = s[0:i] + s[i + 3:]
            flag=1
            break
        if len(s) < 3: break
    if flag==0:break
print(s)

发表于 2019-05-28 20:04:02 回复(0)
package main

import (
    "fmt"
)

func main() {
    var s string
    fmt.Scan(&s)
    ans:=""
    for _,ch:=range []byte(s){
        if len(ans)>1&&ans[len(ans)-1]==ans[len(ans)-2]&&ans[len(ans)-1]==ch{
            ans=ans[:len(ans)-2]
        }else{
            ans+=string(ch)
        }
    }
    fmt.Print(ans)
}

发表于 2023-03-22 01:26:52 回复(0)
let s = readline()
let cnt = 1
let end = 0, start = 0
for (let i = 1; i < s.length; i++) {
  if (s.charAt(i) === s.charAt(i - 1)) {
    cnt++
    end = i
    start = end - cnt + 1
  } else {
    start = i
    cnt = 1
  }
  // console.log(s.charAt(i), cnt, start, end)
    如果这里直接用if判断,那么cnt一到三就会进入这个判断,所以结果是只删除了三个
    如果要删除三个以上,这里的分支要用 else if,并且去掉上面的else分支
  if (cnt >= 3) {
    let s1 = s.slice(0, start)
    let s2 = s.slice(end + 1, s.length)
    s = s1.concat(s2)
  //  console.log('s1:', s1)
  //  console.log('s2:', s2)
  //  console.log('s3:', s)
    cnt = 1
    i = 0
  }
}
// }

console.log(s)

发表于 2022-09-05 16:37:14 回复(0)

# 如果按题目要求的话应该得到 “A”:
def deletetriple(text : str):
    triples = 1
    while len(text)>=3 and triples>0:
        num = 0
        triples = 0
        for x in range(len(text)-1):
            if text[x] == text[x+1]:
                num+=1
            else:
                if num >=2:
                    triples += 1
                    text = "".join([text[:x-num], text[x+1:]])
                    break
                else:
                    num = 0
    return text

# 如果要得到“ABA”答案的话:
def deletetriple(text : str):
    triples = 1
    while len(text)>=3 and triples>0:
        num = 0
        triples = 0
        for x in range(len(text)-1):
            if text[x] == text[x+1]:
                num+=1
            else:
                if num >=2:
                    triples += 1
                    text = "".join([text[:x-num], text[x-num+3:]]) # 只去掉连续三个char
                    break
                else:
                    num = 0
    return text
print(deletetriple("AAABBBAAABBBAAAABBBAABBBAAAABBBBA")
另外我发现这系统好坑,我用得出“A”的方式,它就给“ABA”的结果,我用得出“ABA”的方式,它就给我“A”的答案。。。。。。。真的好无语。。。。。。(有截图图但是死活传不上。。。这系统太折磨人了)
发表于 2020-08-08 19:19:37 回复(0)
题目错了吧,只能三个三个删除,不能删除连续多个,只能删除连续三个。哎 浪费时间,越来越怀念leetcode了
发表于 2020-07-17 14:52:24 回复(1)
样例中含有与题目要求不相符的
#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str;
    cin>>str;
    int len=str.length();
    for(int i=0;i<len;)
    {
        int flag=0,l=3;
        if(str[i+1]==str[i])
        {
            if(str[i+2]==str[i])
            {
                flag=1;
                for(int j=i+3;str[j]==str[i];j++)
                {
                        l++;
                }
            }
        }
        if(flag)
        {
            str.erase(i,l);
            len=len-l;
            if(i>=2)
            {
                i=i-2;
                continue;
            }
        }
        else
        {
            i++;
        }
    }
    cout<<str<<endl;
}

发表于 2019-05-07 17:20:23 回复(0)
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder str = new StringBuilder(br.readLine());
        boolean flg = true;
        int i = 0,j;
        while(flg){
            flg = false;
            for (i = 0,j = 2; j < str.length(); ) {
                if (str.charAt(j)==str.charAt(i)&&str.charAt(i)==str.charAt(i+1)){
                    j++;
                    str.delete(i,j);
                    flg = true;
                    break;

                }else{
                    i++;
                    j = i+2;
                }
            }
        }
        System.out.println(str);
    }
}

发表于 2019-04-28 23:32:56 回复(0)
str=input() while(True): for i in range(len(str)-2):
        temp=str[i:i+3] if(temp[0]*3==temp):
            str=str[0:i]+str[i+3:] break  else: break print(str)
发表于 2019-03-26 18:33:37 回复(0)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * @author wylu
 */
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        boolean flag = true;
        while (flag) {
            flag = false;
            for (int i = 0, j = 1; j < s.length();) {
                while (j < s.length() && s.charAt(j) == s.charAt(i)) j++;
                if (j - i >= 3) {
                    s = s.substring(0, i) + s.substring(i + 3);
                    flag = true;
                    break;
                } else {
                    i = j;
                    j = i + 1;
                }
            }
        }
        System.out.println(s);
    }
}

发表于 2019-02-01 13:26:26 回复(0)