黑马程序员技术交流社区
标题:
上次看到这个题,我弄了个方法。
[打印本页]
作者:
skill20
时间:
2014-5-17 14:16
标题:
上次看到这个题,我弄了个方法。
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
1. 仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc".
2. 压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"
要求实现函数:
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“cccddecc” 输出:“3c2de2c”
输入:“adef” 输出:“adef”
输入:“pppppppp” 输出:“8p”
___________________________________________________________________________________________
这个是我用的方法,用了正则表达式。好像也可以实现。
public static String count(String str){
//定义获取叠词的规则。
String regex = "(.)\\1+";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
while(m.find()){
//获取叠词。
String s = m.group();
//把叠词替换。
str = str.replaceAll(regex,s.length()+ "$1");
}
return str;
}
复制代码
作者:
java木
时间:
2014-5-18 02:57
我一写了一个算法。像这种题训练的逻辑思维,尽量用最基本的算法,练练自己的逻辑思维能力。
package com.itheima.array;
import java.util.Scanner;
public class peo {
private static int count = 0;
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("请输入要编码的字符串");
Scanner input = new Scanner(System.in);
String s1 = input.next().trim();
//为输入的的字符串加上一个空格最为标记。
String s=s1+" ";
//记录转码后的字符串。
String afterS = "";
for (int j = 0, h = 1; h < s.length(); j++, h++) {
if (s.substring(j, h).endsWith(s.substring(h, h + 1))) {
count++;
} else if(count!=0) {
afterS = afterS + (count+1) + s.substring(j, h);
count=0;
}else{
afterS=afterS+s.substring(j,j+1);
System.out.println("哈");
}
}
System.out.println(afterS);
}
}
作者:
13556793092
时间:
2014-5-18 22:12
版主可以详细解释下这里的正则含义吗 "(.)\\1+"; "$1" 初学正则真心求教
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2