首页 > 试题广场 >

字符串的统计字符串

[编程题]字符串的统计字符串
  • 热度指数:2430 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个字符串str,返回str的统计字符串。例如“aaabbbbcccd”的统计字符串为“a_3_b_4_c_3_d_1”。

输入描述:
输入一行字符串,代表str


输出描述:
输出一行字符串,代表统计字符串。
示例1

输入

offerofferzainaliiiiii

输出

o_1_f_2_e_1_r_1_o_1_f_2_e_1_r_1_z_1_a_1_i_1_n_1_a_1_l_1_i_6
示例2

输入

hhhaaa

输出

h_3_a_3

备注:
时间复杂度,空间复杂度
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    public static String getCountString(String str) {
        if (str == null || str.equals("")) {
            return null;
        }

        // 初始时字符串res只包含str的第0个字符,同时num = 1
        StringBuilder res = new StringBuilder();
        res.append(str.charAt(0));
        int num = 1;

        for (int i = 1; i < str.length(); i++) {
            // 当前重复的字符已经结束
            if (str.charAt(i) != str.charAt(i - 1)) {
                res.append('_').append(num).append('_').append(str.charAt(i));
                num = 1;
            } else {
                num++;
            }
        }
        // 当遍历结束时,最后一种字符的次数还没有放入res,需要加上,
        return res.append('_').append(num).toString();
    }

//    private static String concat(String s1, String s2, String s3) {
//        // res(s1) + "_num(s2)" + "动态判断是否需要_的s3(下一个字符)"
//        return s1 + "_" + s2 + (s3.equals("") ? s3 : "_" + s3);
//    }

    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String line= null;
        while ((line = bf.readLine())!=null){
            System.out.println(getCountString(line));
        }
    }

}

发表于 2020-04-06 15:46:05 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    cin>>s;
    int n=1;
    for(int i=1;i<s.size();i++)
    {
        if(s[i]==s[i-1])
            n++;
        else
        {
            cout<<s[i-1]<<"_"<<n<<"_";
            n=1;
        }
    }
    cout<<s[s.size()-1]<<"_"<<n<<endl;
    return 0;
}

发表于 2019-09-13 20:55:54 回复(0)
中规中矩一边遍历一边计数就行
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        char[] str = br.readLine().trim().toCharArray();
        StringBuilder sb = new StringBuilder();
        char target = str[0];
        int count = 1;
        for(int i = 1; i < str.length; i++){
            if(str[i] == target)
                count ++;        // 和前面的字符相同,计数+1
            else{
                // 字符出现变化,更新目标字符和计数
                sb.append(target).append('_').append(count).append('_');
                target = str[i];
                count = 1;
            }
        }
        sb.append(target).append('_').append(count);
        System.out.println(sb);
    }
}

发表于 2021-05-28 10:17:17 回复(0)
#include <bits/stdc++.h>
using namespace std;

int main(){
    string s;
    cin>>s;
    char c = s[0];
    int cnt = 1;
    bool first = true;
    for(int i=1;i<s.length();i++){
        if(s[i]==c)
            cnt++;
        else{
            if(first){
                printf("%c_%d", c, cnt);
                first = false;
            }else
                printf("_%c_%d", c, cnt);
            c = s[i];
            cnt = 1;
        }
    }
    if(first)
        printf("%c_%d", c, cnt);
    else
        printf("_%c_%d\n", c, cnt);
    return 0;
}

发表于 2020-04-12 00:46:12 回复(0)
import java.util.Scanner;

public class Main {

	/**
	 * 字符串的统计字符串
	 * @param args args
	 */
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String line = scanner.next();
		StringBuilder sb = new StringBuilder();
 		while (!"".equals(line)) {
			char[] arr = line.toCharArray();
			char temp = 0;
			int count = 1;
			int index = 0;
			for (int i = 0; i <arr.length; i++) {
				if (i == 0) {
					temp = arr[0];
				} else {
					if (temp == arr[i]) {
						count ++;
					} else {
						index = i;
						sb.append(temp).append("_").append(count).append("_");
						break;
					}
				}
				if (i == arr.length - 1) {
					index = i + 1;
					sb.append(temp).append("_").append(count).append("_");
					break;
				}
			}
			line = line.substring(index);
			if ("".equals(line)) {
				break;
			}
		}
		String str = sb.toString();
 		if (str.endsWith("_")) {
			str = str.substring(0, str.length() - 1);
		}
 		System.out.println(str);
	}
}

发表于 2022-06-08 21:45:58 回复(0)
#读入字符串
input_s=input()
#结果字符串
ans=''
#当前所在的字符
now_index=input_s[0]
#当前所在字符的数量
Count=1
#遍历字符串
for i in input_s[1:]:
    #如果字符相等
    #数量+1
    if i==now_index:
        Count+=1
    #不相等的话
    #输出
    #统计下一个字符
    else:
        ans+=now_index+'_'+str(Count)+'_'
        now_index=i
        Count=1
#最后一个字符的信息
ans+=now_index+'_'+str(Count)
print(ans)

发表于 2021-09-07 09:14:53 回复(0)
while True:
    try:
        strs= input()
        lis=[]
        coun=1
        for i in range(len(strs)-1):
            if strs[i]==strs[i+1]:
                coun+=1
            else:
                lis.append(strs[i]+'_'+str(coun))
                coun=1
        lis.append(strs[-1]+'_'+str(coun)) #最后一位因为循环长度问题,最后添加
        print('_'.join(lis))        
        
    except:
        break

发表于 2021-05-04 23:36:36 回复(0)
import sys
line = sys.stdin.read().rstrip()
label = 0
res=[]
tmp=1
while label<len(line)-1:
    if line[label]==line[label+1] and label<len(line)-1:
        tmp+=1
        label += 1
    else:
        res.append(line[label])
        res.append(str(tmp))
        tmp=1
        label+=1
if label==len(line)-1:
    res.append(line[label])
    res.append(str(tmp))
print("_".join(res))
发表于 2021-03-25 16:37:06 回复(0)
while True:
    try:
        s=input()
        count=1
        ans=''
        for i in range(len(s)-1):
            if s[i]==s[i+1]:
                count+=1
            else:
                ans+=s[i]+'_'+str(count)+'_'
                count=1
        ans+=s[-1]+'_'+str(count)
        print(ans)
    except:
        break

发表于 2021-03-15 03:02:38 回复(0)
#include<iostream>
using namespace std;

int main() {
    string s;cin>>s;
    int n = s.size();
    int count = 1;
    for(int i=1;i<n;++i) {
        if(s[i] == s[i-1]) count++;
        else {
            cout << s[i-1] <<"_" << count<<'_';
            count = 1;
        }
    }
    cout << s[n-1] <<"_" << count << endl;
     
    return 0;
}

发表于 2021-02-02 18:43:03 回复(0)
def count_str(n):
    cur = n[0]
    count = 1
    record = [1]
    new_str = ""
    s = 0
    for i in range(1,len(n)):
        if n[i] == cur:
            count +=1
        else:
            if i == len(n)-1:
                new_str =new_str +str(cur)+"_"+str(count)
            else:  
                new_str =new_str +str(cur)+"_"+str(count)+"_"
            cur = n[i]
            count = 1
        record.append(count)
    print(new_str,end="")
    
import sys
str_n = sys.stdin
for line in str_n:
    count_str(line)
发表于 2020-10-23 10:08:57 回复(0)
#include<bits/stdc++.h>
using namespace std;
#include<stdlib.h>
#include<string>
#include<iostream>

int main(){
    string str;
    cin>>str;
    //getline(cin,str);
    string res;
    int num=1;
    
    int len=str.length();
    if(len<=0|| len>100000){
        return 0;
    }
    res.push_back(str[0]);
    res.push_back('_');
    for(int i=0;i<len-1;i++){
        if(str[i]==str[i+1])
        {
            num++;
        }
        else{
            //to_string(num);
            res.append(to_string(num));
            res.push_back('_');
            res.push_back(str[i+1]);
            res.push_back('_');
            num=1;
        } 
    }
   
    res.append(to_string(num));
    cout<<res<<endl;
    return 0;
   
}    
发表于 2020-08-16 10:46:44 回复(0)
#include <bits/stdc++.h>
using namespace std;
int main() {
	char str[100005];
	scanf("%s",str);
	for(int i=0;i<strlen(str);++i){
		int cnt=1;
		while(str[i]==str[i+1]&&i+1<strlen(str)){
			++i;
			++cnt;
		}
		printf("%c_%d%c",str[i],cnt,i==strlen(str)-1?'\n':'_');
	}
	return 0;
}

发表于 2020-04-10 20:49:29 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main(){
	string s;
	cin>>s;
	char pre=s[0];
	int count=0;
	int flag=0;
	for(int i=0;i<s.size();i++){
		char now=s[i];
		if(now==pre){
			count++;
		}else{
			if(flag==0){
				cout<<pre<<"_"<<count<<"_";
				flag=1;
			}else{
				cout<<pre<<"_"<<count<<"_";
			}
			pre=now;
			count=1;
			}
			if(i==s.size()-1){
				cout<<pre<<"_"<<count<<endl;
			}
		
	}
}
//幼儿园级别的代码水平
发表于 2020-03-25 00:02:27 回复(0)
package character_string;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

//字符串的统计字符串
public class statistics_string {
	public static String getCountString(String str) {
		// 判断字符串是否为空
		if (str == null || str.equals("")) {
			return "";
		}
		// 将字符串转换为数组
		char[] c = str.toCharArray();
		// 获取数组的第一个字符串
		StringBuffer res = new StringBuffer();
		res.append(c[0]);
		int num = 1;
		for (int i = 1; i < c.length; i++) {
			// 判断是否为连续的出现的字符
			if (c[i] != c[i - 1]) {
				res = res.append("_" + num + "_" + String.valueOf(c[i]));
				num = 1;
			} else {
				num++;
			}
		}
		return res.append("_" + String.valueOf(num)).toString();
	}

	public static void main(String[] args) throws IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		String str = in.readLine();
		System.out.println(getCountString(str));
	}

}


发表于 2020-02-12 20:34:18 回复(0)
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
    char str[100000];
    cin>>str;
    char* p1=str;
    char* p2=p1;
    while(*p1)
    {
        while(*++p2==*p1)
            ;
        cout<<*p1<<"_"<<int(p2-p1);
        if(*p2)
            cout<<"_";
        p1=p2;
    }
    return 0;
}

发表于 2020-02-09 13:35:02 回复(0)
如果输入是aaabbca
运行结果是a_3_b_2_c_1_a_1
是错误的呀!
发表于 2020-01-22 16:45:26 回复(1)

dddx

发表于 2019-10-09 11:53:28 回复(0)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    int i = 0, j = 1;
    char str[100000] = {0};

    scanf("%s", str);

    for(i = 1;i <= strlen(str); i++)
    {
        if(str[i] == str[i-1])
        {
            j++;
        }
        else
        {
            if(i == strlen(str))
            {
                printf("%c_%d", str[i-1], j);
            }
            else{
                printf("%c_%d_", str[i-1], j);
            }
            j=1;
        }
    }

    return 0;
}
发表于 2019-09-28 19:24:51 回复(0)
string = input()
n = 1
result = ''
for i in range(1,len(string)):
    if string[i] == string[i-1]:
        n += 1
    else:
        result += string[i-1] + '_' + str(n) + '_'
        n = 1
result += string[len(string)-1] + '_' + str(n)
print(result)

发表于 2019-09-24 11:31:09 回复(0)