首页 > 试题广场 >

字符串编码

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

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


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

输入

AAAABCCDAA

输出

4A1B2C1D2A

public class Main

{

public static void main(String[] args) {

String str="sgaaaaaaaaaaaa";

char pre='\0';

int count=1;

int i=0;

for(;i<str.length();i++){

if(pre=='\0'){

pre=str.charAt(i);continue;

}

if(pre == str.charAt(i)){

count++;

if(i==str.length()-1){

System.out.print(count+""+pre);

}

}

else {

System.out.print(count+""+pre);

pre=str.charAt(i);

count=0;

--i;

}

}

}

}

发表于 2017-05-30 17:45:12 回复(0)


import java.io.BufferedInputStream; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) {   Scanner scanner = new Scanner(new BufferedInputStream(System.in));
      regex(scanner); 
       }
      public static void regex(Scanner scanner) {   while (scanner.hasNext()) { 
       String s = scanner.nextLine();    Pattern p = Pattern.compile("(.)\\1*");    Matcher m = p.matcher(s);
       StringBuffer sb = new StringBuffer();    while (m.find()) {    m.appendReplacement(sb, m.group(0).length() + m.group(1));    }    System.out.println(sb.toString()); 
       }
      } }

使用正则表达式
编辑于 2017-05-12 00:44:03 回复(0)

java StringBuilder简单解决,这么简单不用注释了吧,,


import java.util.*;
public class Main {
public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    while(sc.hasNext()){
        String s=sc.next();
        StringBuilder s1=new StringBuilder();
        int j=0;
        for(int i=0;i<s.length()-1;i++){
            j++;
            if(i==s.length()-2){
                if(s.charAt(i)!=s.charAt(i+1)){
                    s1.append(j+""+s.charAt(i)+""+1+""+s.charAt(i+1));
                }
                else s1.append((j+1)+""+s.charAt(i));
                break;
            }
            if(s.charAt(i)!=s.charAt(i+1)){
                s1.append(j+""+s.charAt(i));
                j=0;
//                System.out.println(s1);
            }
        }
                if(s.length()==1)s1.append(1+s);

        System.out.println(s1);
    }
}
}
发表于 2017-03-25 10:22:17 回复(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)
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)
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /**  * Created by Yuan on 2017/3/1.  */ public class SystemInTest { public static void main(String[] args) throws IOException {
        BufferedReader buffer=new BufferedReader(new InputStreamReader(System.in));
        String str=buffer.readLine(); char[] inputs= str.toCharArray();
        String strRes=changeInformation(inputs);
        System.out.println(strRes);
    } public static String changeInformation(char[] chars){ char lastChar; char currentChar;
        String result=""; int count=1; for(int i=1;i<chars.length;i++){
            currentChar=chars[i];
            lastChar=chars[i-1]  ; if(currentChar==lastChar){
                count++;
            }else{
                result=result+count+lastChar;
                count=1;
            }
        }
        result=result+count+chars[chars.length-1]; return result;
    }
}  
发表于 2017-03-01 18:36:00 回复(0)