首页 > 试题广场 >

字符串编码

[编程题]字符串编码
  • 热度指数:11497 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给定一个字符串,请你将字符串重新编码,将连续的字符替换成“连续出现的个数+字符”。比如字符串AAAABCCDAA会被编码成4A1B2C1D2A。

输入描述:
每个测试输入包含1个测试用例
每个测试用例输入只有一行字符串,字符串只包括大写英文字母,长度不超过10000。


输出描述:
输出编码后的字符串
示例1

输入

AAAABCCDAA

输出

4A1B2C1D2A
//看看我的多简洁
#include <iostream>
#include <string>
using namespace std;
int main() {
    int i = 0, n = 1;
    string a;
    string b;
    cin >> a;
    while (a[i]) {
        if (a[i + 1] == a[i]) {
            n++;
        }
        else {
            cout << n << a[i];
            n = 1;
        }
        i++;
    }
    return 0;
}
发表于 2017-03-03 12:42:56 回复(15)
<?php
//初始化。
$test = null;
$num = 1;
$res = null;
//获取一个数组。
$chars = array('A','B','C','D','E','F');
for($n=0;$n<9999;$n++){
    $key=array_rand($chars,1);
    $test = $test.$chars[$key];
}
//获取数组长度。
$length=strlen($test);
//开始计算。
for($i=0;$i<$length;$i++){
    $a = substr($test,$i,1);
    $b = substr($test,$i+1,1);
    if($a==$b){
        $num++;
    }else{
    $res = $res.$num.$a;
    $num = 1;
  }
}
echo $res;
?>
编辑于 2017-03-07 11:30:32 回复(0)
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        char[] array = s.toCharArray();
        StringBuilder sb = new StringBuilder();
        int count = 1;
        if (array.length == 0) {
            System.out.print("null");
        }
        if (array.length == 1) {
            System.out.print("" + count + array[0]);
        }
        for (int i = 1; i < array.length; i++) {
            if (array[i] == array[i - 1]) {
                count++;
            } else {
                sb.append(count).append(array[i - 1]);
                count = 1;
            }
            if (i == array.length - 1) {
                sb.append(count).append(array[i]);
            }
        }
        System.out.print(sb.toString());
    }
}

发表于 2017-03-13 12:34:48 回复(5)
#include <iostream>
#include <string>

using namespace std;

void printString(string str){
    string::size_type i=0;
    int count=1;
for(i=0; i<str.size(); ++i){
        if (str[i] == str[i+1]){
            ++count;
            continue;
        }
        cout << count << str[i];
        count = 1;
    }
}

int main()
{
    string str = "AAAABCCDAA";
    printString(str);
    
    return 0;
}
发表于 2017-03-19 16:35:17 回复(0)
#include<iostream>
#include<string>
 
using namespace std;
 
int main()
{
    string s;
    cin >> s;
    int res = 1;
    for (int i = 0; i < s.length(); i++)
    {
        if (s[i] == s[i + 1])
        {
            res++;
        }
        else
        {
            cout << res << s[i];
            res = 1;
        }
    }
    return 0;
}



发表于 2020-02-15 11:51:55 回复(0)
#include <iostream>  
#include <string>  
using namespace std;  
//将数字字符串格式转换为原来字符串中出现的字符+该字符连续出现的次数的字符串P231  
string func(string str){  
    string ret;  
    int len=str.length();  
    for (int i=0;i<len;i++)  
    {  
        //当是连续字符时,跳过并将计数加一  
        int count=1;  
        while (str[i]==str[i+1])  
        {  
            count++;  
            i++;  
        }  
        //统计连续出现的字符及出现的次数到结果字符串  
     
        char tmp[10];  
        sprintf(tmp,"%d",count);//代替itoa使用,sprintf_s存在版本问题  
            ret+=tmp;  
		ret+=str[i];  
    }  
    return ret;  
      
}  
  
int main(){  
  
    string str;  
    cin>>str;
    cout << func(str) << endl;   
    return 0;  
}  

发表于 2017-03-09 15:58:22 回复(1)
var readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

rl.on('line', function (input) {
    var str = input
    function convert(str){
        var ans = ''
        for (var i=0; i< str.length; i++){
            if (str[i] === str[i+1]){
                var sum = 1
                while (str[i] === str[i+1]){
                    i++
                    sum++
                }
                ans += '' + sum + str[i]
            }else {
                ans += '' + 1 + str[i]
            }
        }
        return ans
    }
    console.log(convert(str))
});

发表于 2019-08-26 10:23:59 回复(0)
#include <cstdio>
#include <cstring>
#include <algorithm>
usingnamespacestd;
 
chars[10010];
 
intmain() {
    scanf("%s", s+1);
    intcnt = 0;
    charch = s[1];
    s[0] = s[1];
    for(inti = 1; s[i]; i++) {
        if(s[i] == s[i-1]) cnt++;
        else{
            printf("%d%c", cnt, ch);
            cnt = 1;
            ch = s[i];
        }
    }
    printf("%d%c", cnt, ch);
    return0;
}

发表于 2019-03-08 16:48:57 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    cin >> s;
    int i = 0;
    int t ;
    while (i < s.size())
    {
        t = 0;
        while (i + t <= s.size())
        {
            if (s[i] == s[i + t])
            {
                t++;
            }
            else
            {
                cout << t << s[i];
                i = i + t;
                t = 10001;
            }
        }
    }
    return 0;
}

发表于 2019-03-07 23:16:35 回复(0)
#include <bits/stdc++.h>
usingnamespacestd;
intmain()
{
    string str;
    while(cin>>str)
    {
        intcnt=0;
        intn=str.size();
        vector<int> dp(n,1);
        if(n==1) cout<<1<<str[0]<<endl;
        else{
        for(inti=1;i<n;i++)
        {
            if(str[i]==str[i-1])   
            {
                dp[i]=dp[i-1]+1;
            }
        }
        for(inti=1;i<n;i++)
        {
             
            if((dp[i-1]+1)!=dp[i])
            {
                cout<<dp[i-1]<<str[i-1];
            }           
           if(i==n-1) cout<<dp[n-1]<<str[n-1]<<endl;
        }
        }
    }
    return0;
}

发表于 2018-08-09 16:38:28 回复(0)
//运用积分图加快运算

#include <iostream>
#include <vector>
#include <numeric>
#include <limits>
#include <math.h>
#include <algorithm>
#include <string>
using namespace std;

static int maxsum = -2147483647;
void inpudata(vector<vector<int>> &input,const int N) {
    int tmp;
    vector<int> tmpvec;
    for (int i = 0; i < N; i++) {
        tmpvec.clear();
        for (int j = 0; j < N; j++) {
            cin >> tmp;
            tmpvec.push_back(tmp);
        }
        input.push_back(tmpvec);
    }
}
void rowMax(const vector<vector<int>> &input,const int D,const int N) {
    int tmpsum;
    for (int i = 0; i < N; i++) {
        tmpsum = 0;
        for (int j = 0; j < D; j++) {
            tmpsum += input[i][j];
            
        }
        if (tmpsum > maxsum) {
            maxsum = tmpsum;
        }
        for (int j = D; j < N; j++) {
            tmpsum -= input[i][j - D];
            tmpsum += input[i][j];
            if (tmpsum > maxsum) {
                maxsum = tmpsum;
            }
        }
    }
}
void colMax(const vector<vector<int>> &input, const int D, const int N) {
    int tmpsum;
    for (int i = 0; i < N; i++) {
        tmpsum = 0;
        for (int j = 0; j < D; j++) {
            tmpsum += input[j][i];

        }
        if (tmpsum > maxsum) {
            maxsum = tmpsum;
        }
        for (int j = D; j < N; j++) {
            tmpsum -= input[j-D][i];
            tmpsum += input[j][i];
            if (tmpsum > maxsum) {
                maxsum = tmpsum;
            }
        }
    }
}

void upleftTobottomrightMax(const vector<vector<int>> &input, const int D, const int N) {
    vector<vector<int>> summap;
    vector<int> sumvec(N+1,0);
    
    summap.push_back(sumvec);
    int tmpsum;
    for (int i = 0; i < N; i++) {
        sumvec.clear();
        sumvec.push_back(0);
        for (int j = 1; j <=N; j++) {
            sumvec.push_back(summap[i][j - 1] + input[i][j-1]);
        }
        summap.push_back(sumvec);
    }
    for (int i = D - 1; i < N; i++) {
        for (int j = D - 1; j < N; j++) {
            tmpsum = summap[i+1][j+1] - summap[i - D +1][j - D + 1];
            if (tmpsum> maxsum) {
                maxsum = tmpsum;
            }
        }
    }
    
}
void uprightTobottomleftMax(const vector<vector<int>> &input, const int D, const int N) {
    vector<vector<int>> summap;
    vector<int> sumvec(N + 1, 0);

    summap.push_back(sumvec);
    int tmpsum;
    for (int i = 0; i < N; i++) {
        vector<int> sumvec2(N + 1, 0);
        
        for (int j = N-1; j >=0; j--) {
            sumvec2[j]=summap[i][j+1]+input[i][j];
        }
        
        summap.push_back(sumvec2);
    }
    for (int i = D-1; i <N; i++) {
        for (int j = 0; j < N-D+1; j++) {
            tmpsum = summap[i + 1][j] - summap[i - D +1][j+D];
            if (tmpsum> maxsum) {
                maxsum = tmpsum;
            }
        }
    }

}
int main() {
    vector<vector<int>> input;
    int N, D;
    cin >> N;
    cin >> D;
    inpudata(input, N);
    uprightTobottomleftMax(input, D, N);
    rowMax(input,D,N);
    upleftTobottomrightMax(input,D,N);
    colMax(input, D, N);
    cout<<maxsum<<endl;

    
    return 0;
}

发表于 2018-03-11 18:48:40 回复(0)
//javascript版本
while(line = readline()){
    var result = line.replace(/([A-Z]{1})\1*/g, function(s, s1){
        returns.length + s1;
    });
    print(result);
}
发表于 2017-09-12 18:39:42 回复(0)
#include <string>
#include <iostream>  
#include <vector> 
using namespace std;

int main()
{
	string str;
	string res;
	cin >> str;
	char ch = str[0];
	int x = 0;
	for (int i = 0; i < str.size(); i++){
		if (str[i] == ch){
			x++;
		}
		else{
			res.append(to_string(x));
			res.push_back(ch);
			ch = str[i];
			x = 1;
		}
		if (i == str.size() - 1){
			res.append(to_string(x));
			res.push_back(ch);
		}
	}
	cout << res << endl;
	cin.get();
	cin.get();
	return 0;
}

发表于 2017-03-28 21:13:13 回复(0)
/*case通过率只有90%哦*/
package com.test;

import java.util.Scanner;

public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
java.lang.String n = sc.nextLine();
StringBuffer sb = new StringBuffer();
int sum = 1;
for(int i = 0;i < n.length() - 1;i++){
char x = n.charAt(i);
if(n.charAt(i) == n.charAt(i+1)){
sum += 1;
if(i+1 == n.length() - 1 ){
sb.append(sum);
sb.append(x);
}
}else{
sb.append(sum);
sb.append(x);
sum = 1;
if(i + 1 == n.length()-1){
sb.append(sum);
sb.append(n.charAt(i+1));
}
}
}
System.out.println(sb);
}

}

发表于 2017-03-08 16:13:29 回复(2)
import java.util.Scanner;

public class Main {
	public static void main(String[] args){
		Scanner sc= new Scanner(System.in);
		String str = sc.next();
		StringBuilder result=new StringBuilder();
		char c=' ';
		char[] ch=str.toCharArray();
		
		//count 为重复计数
		int count=1;
		for(int i=1;i<ch.length;i++){
			
			
			if(ch[i]==ch[i-1]){
				count++;
			}else{
				result.append(count);
				result.append(ch[i-1]);
				count=1;	
			}
			if(i==ch.length-1){
				result.append(count);
				result.append(ch[i]);
			}
			
			
			
		}
		
		System.out.println(result.toString());
	}

}
为什么通过率是90%?
发表于 2017-03-08 14:27:45 回复(2)
ainput = raw_input()
length = len(str(ainput))
ture = []
fori in range(length - 1):
    ifainput[i] == ainput[i + 1]:
        ture.append(1)
    else:
        ture.append(0)
ture.append(0)     
output = ''
j = 0
fori in range(len(ture)):
    ifture[i] == 0:
        output = output + str(i-j+1)
        output = output + ainput[i]
        j = i + 1
print output

发表于 2017-03-07 14:45:03 回复(0)
importjava.util.*;
publicclassMain{
publicstaticvoidmain(String args[]){
    Scanner input=newScanner(System.in);
    String s=input.nextLine();
    StringBuffer sb=newStringBuffer();
    intlen=s.length();
    for(inti=1;i<=len;i++){
        intcount=1;
        while(i<len&&s.charAt(i)==s.charAt(i-1)){
            count++;
            i++;
        }
        sb.append(count).append(s.charAt(i-1));
    }
    System.out.println(sb.toString());
}
}
发表于 2017-03-06 17:29:53 回复(0)
#include <cstdio>
#include <string>
#include <iostream>

using namespace std;

string num = "0123456789";

string intToString( int n ) {
    string str = "";
    while( n ) {
        str = num[n % 10] + str;
        n = n / 10;
    }

    return str;
}

string solve( string str ) {
    int len = str.size();
    int i = 0;
    char cur;
    int cnt;
    string ans = "";
    while( i < len ) {
        cur = str[i];
        cnt = 0;
        int j = 0;
        for( j = i; j < len; j++ ) {    // 从当前位置开始检索
            if( str[j] == cur ) {
                cnt++;
            }
            else if( str[j] != cur ) {
                ans = ans + intToString( cnt );
                ans = ans + cur;
                i = j;                      // 从i = j这个位置再开始检索
                //cout << ans << endl;
                break;
            }
        }
        if( j == len ) {
            ans = ans + intToString( cnt );
            ans = ans + cur;
            //cout << ans << endl;
            break;
        }
    }

    return ans;
}

int main() {
    string str;

    while( cin >> str ) {
        string ans = solve( str );
        cout << ans << endl;
    }

    return 0;
}

发表于 2017-03-05 15:23:49 回复(0)
使用的StringBuilder

importjava.util.Scanner;
publicclassMain {
 
    publicstaticvoidmain(String ...args){
        Scanner scanner = newScanner(System.in);
        String str = scanner.nextLine();
        System.out.println(dealWithString(str));
    }
 
   publicstaticString dealWithString(String str){
 
        char[] chars ;
        StringBuilder result = newStringBuilder();
        longnum = 0;
 
        chars = str.toCharArray();
        chartemp = chars[0] ;
        intt = str.length() - 1;
 
 
        for(inti = 0; i < str.length(); i++) {
            if(temp == chars[i] ) {
                num++;
            }
            else{
                result.append(num)
                        .append(temp);
                num = 1;
                temp = chars[i];
            }
        }
        result.append(num).append(temp);
        returnresult.toString();
    }
     
}
发表于 2017-03-02 20:04:40 回复(0)
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            String str=sc.next();
            char[] ch = str.toCharArray();
            StringBuffer sb = new StringBuffer();
            char cur=ch[0];      
            int total=0;
            for(int i=0; i<ch.length; ++i){
                if(ch[i] == cur){
                    total++;
                    if(i == (ch.length-1)){
                        sb.append(total);
                        sb.append(cur);
                    }
                }
                 
                else
                {
                    sb.append(total);
                    sb.append(cur);
                    total=0;
                    cur=ch[i];
                    i--;  
                }
                 
            }
            System.out.println(sb.toString());
             
        }
    }
}
编辑于 2017-03-06 09:44:30 回复(0)