首页 > 试题广场 >

删除字符

[编程题]删除字符
  • 热度指数:2865 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

将给定的字符串,按照规则删除字符,输出删除后的字符串。删除规则为:相同字符连续,则删除,如”aaaab”删除后的字符串为”b” 。注:仅是单个字符连续才删除,如babababa则不能删除;


输入描述:
输入数据有多组,每组一行,仅包含数字和英文字母,不包含转义等其他特殊字符,输入数据最大长度为10;


输出描述:

对于每个测试实例,要求输出按规则删除后的数据,每个测试实例的输出占一行。如果删除后有字符,直接输出删除后的字符;如果删除后为空,则输出”no”

示例1

输入

a
aaaaabbbb

输出

a
no
左右两边都不相同,就保留,第一个和最后一个特殊处理一下计划好了
while True:
    try:
        input_str = input()
        result = ""
        for i in range(len(input_str)):
            if len(input_str) == 1:
                result = input_str
                break
            if i == 0:
                if input_str[i + 1] != input_str[i]:
                    result = result + input_str[i]
            elif i == len(input_str) - 1:
                if input_str[i - 1] != input_str[i]:
                    result = result + input_str[i]
            else:
                if input_str[i - 1] != input_str[i] and input_str[i + 1] != input_str[i]:
                    result = result + input_str[i]
        if len(result) == 0:
            print("no")
        else:
            print(result)
    except:
        break


发表于 2020-03-21 15:28:53 回复(6)
分享一个双指针的思路,抛砖引玉。
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String str = in.nextLine();
            StringBuilder sb = new StringBuilder();
            // i记录连续子串的头部
            for (int i = 0; i < str.length(); i++) {
                // j为移动指针,记录连续子串的尾部
                int j = i;
                // 若后一个字符跟当前一样,则j后移一位
                while (j + 1 < str.length() && str.charAt(j) == str.charAt(j + 1))
                    j++;
                if (i == j)
                    // ij相等说明不是连续的,拼接之
                    sb.append(str.charAt(i));
                else
                    // 当前子串是连续,跳过
                    i = j;
            }
            if (sb.toString().equals(""))
                System.out.println("no");
            else
                System.out.println(sb);
        }
    }

}
发表于 2020-03-12 11:12:03 回复(0)
#include <iostream>
(720)#include <string>

using namespace std;

int main()
{
	string str;
	char c[256];
	int index, last;

	while (cin >> str)
	{
		index = 0;
		last = index;
		if (str[0] != str[1])
			c[index++] = str[0];
		int len = str.size();
		for (int i = 0; i < len - 1; i++)
		{
			if (str[i] != str[i + 1])
			{
				c[index++] = str[i + 1];
				last = index - 1;
			}
			else
				index = last;
		}
		string str2(c, c + index);
		if (str2.empty())
			cout << "no" << endl;
		else
			cout << str2 << endl;
	}
}

发表于 2020-03-12 01:14:13 回复(1)
while 1:
    # 循环处理
    try:
        # 获取到字符串
        s1 = input()
        # 定义两个列表,初始值都是s1的遍历
        list_s1 = [i for i in s1]
        list_s2 = [i for i in s1]
        # 使用一个列表来固定最大索引数,并遍历列表
        for i in range(0, len(list_s1) - 1):
            # 如果前一位和后一位相等的话,就将另一个列表中的两个相等的元素置为空
            if list_s1[i] == list_s1[i + 1]:
                list_s2[i] = list_s2[i + 1] = ''
        # 判断如果列表不为空,则输出字符串
        if ''.join(list_s2) != '':
            print(f"{''.join(list_s2)}")
        else:
            print('no')
    except:
        break

发表于 2023-03-02 17:46:11 回复(0)
#include<iostream>
#
include<string>
using namespace std;
int main() {
    string s;
    while (cin >> s) {
        int S_length = s.length();
        string new_S = "";
        for (int i = 0; i < S_length;) {
            int j = i + 1;
            while (s[i] == s[j]) {
                j++;
            }
            if (j - i == 1) {
                new_S += s[i];
                i++;
            }

            else
                i = j;
        }
        if (new_S == "")
            cout << "no"<<endl;
        else
            cout << new_S<<endl;
    }
    return 0;
}
发表于 2020-03-21 11:33:38 回复(0)
[Python3] 利用二维数组对元素进行计数
while 1:
    try:
        s = input()
        if not s:
            print("no")
        else:
            res, ans = [[s[0], 1]], ""
            for i in range(1, len(s)):
                if s[i] == res[-1][0]:
                    res[-1][1] += 1
                else:
                    res.append([s[i], 1])
            for j in res:
                if j[1] == 1:
                    ans = ans + j[0]
            if not ans:
                print("no")
            else:
                print(ans)
    except:
        break


发表于 2021-07-26 10:14:45 回复(0)
while True:
    try:
        str = list(input())
        n = len(str)
        i = 0
        res = []
        if len(str) == 1:
            print("".join(str))
        while i+1 < n:
            j = i+1
            num = 1
            while(str[j] == str[i]):
                if j+1 < n:
                    j = j+1
                    num += 1
                else:
                    num += 1
                    break
            if num == 1:
                res.append(str[i])
            i += num

        if str[-1] != str[-2]:
            res.append(str[-1])
        if len(res) == 0:
            print("no")
        else:
            print("".join(res))
    except:
        break


编辑于 2020-04-14 17:34:02 回复(0)
import sys

for line in sys.stdin:
    res = []
    index = 0
    for n in line:
        if index == 0:
            if len(line) == 1:
                res.append(n)
            elif n != line[index + 1]:
                res.append(n)
        elif 0 < index < len(line) - 2:
            if n != line[index - 1] and n != line[index + 1]:
                res.append(n)
        elif index < len(line) - 1:
            if n != line[index - 1]:
                res.append(n)
        index += 1
    if res:
        out = "".join(res)
        print(out)
    else:
        print("no")

发表于 2023-10-18 20:12:17 回复(0)
s=input()
result = []
for i in range(len(s)):
    if i == 0&nbs***bsp;s[i] != s[i - 1]:
        result.append(s[i])
print(''.join(result))

编辑于 2023-08-11 22:39:21 回复(0)
import re

def get_tuples_from_user():
    """
    检测输入的字符串是否符合格式,输入done结束输入
    :return:
    """
    tuples_list = []

    while True:
        # 对每次输入检测
        input_string = input('请输入数字和字母\n')
        if input_string == 'done':
            break
        else:
            if input_string.isalnum() == True:
                tuples_list.append(input_string)
            else:
                print('数据格式不对')

    return tuples_list


def Processing_input_strings(input_string):
    """
    接收了一个输入的字符串列表,返回按照规则删除后的数据
    :return:
    """
    out_put = []

    for i in input_string:
        #正则匹配重复字母数字并删除
        pattern = r'([a-zA-Z0-9])\1+'
        matches = re.sub(pattern,'',i)
        if matches == '':
            out_put.append('None')
        else:
            out_put.append(matches)

    print(out_put)


Processing_input_strings(get_tuples_from_user())

发表于 2023-08-03 15:21:55 回复(0)
import sys

for line in sys.stdin:
    line = line.strip()
    if not line:
        print('no')
    charNow = line[0]
    repeat = 0
    result = ''
    for char in line[1:]:
        if char == charNow:
            repeat = 1
        else:
            if not repeat:
                result += charNow
            charNow = char
            repeat = 0
    if not repeat:
        result += charNow
    if not len(result):
        print('no')
    else:
        print(result)


编辑于 2023-05-30 16:55:49 回复(0)
#include <iostream>
#include<cstdio>
#include<string>
using namespace std;

int main() {
    string s, str = "";
    while (cin >> s) {
        int i = 0, j = 1;
        int k;
        str = "";
        while (i < s.size()) {
            if (s[i] == s[j]) {
                j++;
                while (s[i] == s[j]) {
                    j++;
                }
                for (k = i; k < j; k++) {
                    s[k] = '&';
                }
                i = j;
                j = i + 1;
            } else {
                i++;
                j++;
            }
        }
        i = 0;
        while (i < s.size()) {
            if (s[i] != '&')str = str + s[i];
            i++;
        }
        if (str == "") str = "no";
        cout << str << endl;
    }
}


发表于 2023-03-18 20:51:46 回复(0)
按照评论区的答案把自己的修改了一下通过了。。。但我不太懂,实际运行的时候怎么输入多行数据的呢,按一下回车不就直接运行了吗
while True:
    try:
        s1=input()
        list1=list(s1)
        result1=[]
        for ch in list1:
            if len(result1)==0:
                result1.append(ch)
            elif ch==result1[-1]:
                result1.pop()
            else:
                result1.append(ch)
        s3=''.join(result1)
        if len(s3)==0:
            s3='no'
        print(s3)
    except:
        break
发表于 2022-12-20 13:18:24 回复(0)
C解法:遍历字符串,如果两边都不相同就输出,如果没有输出就打印no
#include<stdio.h>
#include<string.h>
int main()
{
    char a[100];
    while (gets(a))
    {
        int i,t=0;
        for(i=0;i<strlen(a);i++)
        {
            if(a[i-1]!=a[i]&&a[i+1]!=a[i])
            {
                printf("%c",a[i]);
                t=1;
            }
        }
        if(t!=1) printf("no");
        printf("\n");
    }
    return 0;
}


发表于 2021-08-12 23:23:01 回复(0)

双指针 字符串的一些用法

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main(){
    string s;
    while(cin>>s){
        int j=1;
        int i=0;
        while(i<s.size()){//i不是线性增加就不要用for了
            if(s[i]==s[j]){
                j++;
            }else if(j-i>1){
                s.replace(i,j-i,j-i,'?');
                i=j;
                j++;
            }else{//不重复
                i++;
                j++;
            }
        }
        string str="";
        for(int i=0;i<s.size();i++){
            if(s[i]!='?'){
                str+=s[i];//多用新的去处理
            }
        }
        if(str==""){
            str="no";
        }
        cout<<str<<endl;
    }

    return 0;
}
发表于 2021-03-27 11:15:30 回复(0)
利用栈的先进后出特性,相同的字符不入栈,并对字符进行标记,最后将其pop出
import sys


while True:
    string = sys.stdin.readline().strip()
    if string == "":
        break
    stay = []
    value = 0  #重复标记
    for s in string:
        if stay:
            a = stay.pop()
            if s != a:
                if value == 0:
                     stay.append(a)
                value = 0
            else:
                value = 1
            stay.append(s)
        else:
            stay.append(s)
    if value == 1:
        stay.pop()
    stay = ''.join(stay)
    if stay:
        print(stay)
    else:
        print("no")


发表于 2020-10-03 11:10:28 回复(0)
while True:
    try:
        zifu = input()
        zifuchuan = []
        for zi in zifu:
            zifuchuan.append(zi)
        record = []
        for i in range(len(zifuchuan)-1):
            if zifuchuan[i] == zifuchuan[i+1]:
                record.append(i)
                record.append(i+1)
        record = list(set(record))
        if record != []:
            for re_ in record:
                zifuchuan[re_] = ''
            output = ''.join(zifuchuan)
            if output == '':
                print('no')
            else:
                print(output)      
        else:
            print(''.join(zifuchuan))
    except:
        break

编辑于 2020-09-17 17:45:08 回复(0)
s = str(input()) 
end = str("")
if (len(s) == 0):
    print("no")
    
else:
    for i in range(len(s)):
        
        if (len(s)==1):
            print(s)
            break          
        else:
            if(i==0):
                end = end + s[i]
                    
            elif(i==len(s)-1):
                if(s[i-1]!=s[i]):
                    end = end + s[i] 
            else:
                if (s[i-1]!=s[i]):
                    end = end + s[i]
                    
    print(end)

发表于 2020-09-14 11:15:48 回复(0)
while True:
    try:
        a = input()
        res = [] ; l = len(a) ; t = 0 ; result = ""
        for i in range(l-1):
            if(a[i] != a[i+1]):res.append(a[t:i+1]) ; t = i+1
        res.append(a[t:])
        for i in res:
            if(len(i) == 1):result = result + i
        print("no" if not result else result)
    except:
        break 
发表于 2020-09-05 09:43:45 回复(0)
used存放重复的元素,第一个元素为空格,所以可以保存第一个,最后一个也要考虑好。
while True:
    try:
        num = input()
        s = ""
        used = " "
        for i in range(len(num)-1):
            if num[i] != num[i+1] and num[i] != used[-1]:
                s += num[i]
            else:
                used += num[i]
        if num[-1] != used[-1]:s += num[-1]
        print(s if s else 'no')
    except:
        break


编辑于 2020-08-31 23:17:52 回复(0)