将给定的字符串,按照规则删除字符,输出删除后的字符串。删除规则为:相同字符连续,则删除,如”aaaab”删除后的字符串为”b” 。注:仅是单个字符连续才删除,如babababa则不能删除;
将给定的字符串,按照规则删除字符,输出删除后的字符串。删除规则为:相同字符连续,则删除,如”aaaab”删除后的字符串为”b” 。注:仅是单个字符连续才删除,如babababa则不能删除;
输入数据有多组,每组一行,仅包含数字和英文字母,不包含转义等其他特殊字符,输入数据最大长度为10;
对于每个测试实例,要求输出按规则删除后的数据,每个测试实例的输出占一行。如果删除后有字符,直接输出删除后的字符;如果删除后为空,则输出”no”
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
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); } } }
#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; } }
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
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
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
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")
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))
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())
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)
#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; }
双指针 字符串的一些用法
#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; }
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")
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
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