NC200142. 好字符串
描述
由相同的字符组成的字符串称作好字符串。例如:"aaa","bbb","c"可以称作好字符串,而"abaaa", "aac", "accc"不是。现在给你一个长度为的字符串,请你找出其中长度最长的好字符串并输出。
输入描述
第一行包括一个数,代表有组数据。每组数据第一行包括一个整数,表示字符串的长度。随后输入一行字符串。
输出描述
每组数据输出一行字符串S中长度最长的好字符串。如果有多个好字符串满足题目要求,则输出最先出现的。
示例1
输入:
2 12 abcdaacbbaaa 9 cccaaabbb
输出:
aaa ccc
C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 400K, 提交时间: 2023-01-14 14:47:51
#include<bits/stdc++.h> using namespace std; string a, b; int len = 1; int main() { int T; cin >> T; while (T--) { int length; cin >> length; cin >> a; int tmp = 0; int x = 0; for (int i = 1; i < length; i++) { if (a[i] == a[i-1]) { len++; } else { if (len > tmp) { b = a.substr(x, len); tmp = len; } x = i; len = 1; } } if (len > tmp) b = a.substr(x, len); cout << b << endl; len = 1; } return 0; }
Pascal(fpc 3.0.2) 解法, 执行用时: 3ms, 内存消耗: 372K, 提交时间: 2019-12-08 14:45:49
program d; var n,i,l,j,k,t,x:integer; s:string; begin readln(n); for i:=1 to n do begin readln(l); readln(s); x:=1; t:=0; for j:=2 to l do if s[j]<>s[j-1] then begin if j-x-1>t then begin t:=j-x-1; k:=x; end; x:=j; end; if l-x>t then begin t:=l-x; k:=x; end; for j:=k to k+t do write(s[j]); writeln; end; end.
C++(clang++ 11.0.1) 解法, 执行用时: 3ms, 内存消耗: 436K, 提交时间: 2023-01-14 15:21:15
#include<iostream> using namespace std; int main() { int T,n; char s[10000]; scanf("%d",&T); while(T--) { int max=0,count=1; char m; scanf("%d",&n); scanf("%s",s); for(int i=1;i<n;i++) { if(s[i]==s[i-1]) count++; else count=1; if(count>max) { m=s[i]; max=count; } } for(int i=1;i<=max;i++) { printf("%c",m); } printf("\n"); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 436K, 提交时间: 2023-01-14 15:18:58
#include <stdio.h> int main(){ int n,len,i,j=0,max=0,p; char a[1000],t,b[1000]; scanf("%d",&n); while(n!=0){ scanf("%d",&len); scanf("%s",a); t=a[0]; for(i=0;i<len;i++){ j++; if(a[i]!=a[i+1]){ if(j>max){ max=j; t=a[i]; } j=0; } } for(p=0;p<max;p++){ b[p]=t; printf("%c",b[p]); } printf("\n"); n--; max=0; } return 0; }
Python3(3.9) 解法, 执行用时: 42ms, 内存消耗: 3844K, 提交时间: 2020-12-04 13:34:49
import re from collections import namedtuple Result = namedtuple('Result', ['string', 'index']) case = int(input()) for _ in range(case): input() s = input() splitted = [i[0] for i in re.findall(r'((.)\2*)', s)] a = [Result(elem, idx) for (idx, elem) in enumerate(splitted)] print(sorted(a, key=lambda i: (len(i.string), -i.index), reverse=True)[0].string)