在网上看到一个面试题,要求
写道
将字符串中相邻相同的子串合并为一个子串,如"12342343454565678789" -- "123456789"
因为最近在看js的正则表达式,觉得java也是可以实现的,结果碰巧就实现了。用了两种方法,可其实原理都是一样的。个人觉得这样写效率比较高,各位觉得呢?
package regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 将字符串中相邻相同的子串合并为一个子串,如"12342343454565678789" -- "123456789"
*/
public class StringMerge {
public static void main(String[] args) {
// System.out.println(tt(6));
mergeString2("1234234345456567878911111111111111112343333333333");
System.out.println("----");
mergeString("1234234345456567878911111111111111112343333333333");
}
public static void mergeString(String str) {
String regex = "(\\d+)\\1";
String temp1 = replace(regex, str);
int len2 = str.length();
while (temp1.length() != len2) {
//System.out.println(len2 + "--" + temp1.length());
len2 = temp1.length();
temp1 = replace(regex, temp1);
}
System.out.println("方法一:"+temp1);
}
/**
* 用appendReplacement ..方法一:
* @param str
*/
public static String replace(String regex, String str) {
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, "$1");
}
m.appendTail(sb);
//System.out.println(sb.toString());
return sb.toString();
}
public static void mergeString2(String str) {
String regex = "(\\d+)\\1";
String temp1 = replace2(regex, str);
int len2 = str.length();
while (temp1.length() != len2) {
//System.out.println(len2 + "--" + temp1.length());
len2 = temp1.length();
temp1 = replace2(regex, temp1);
}
System.out.println("方法一:"+temp1);
}
/**
* 用replaceAll实现,方法二:
* @param regex
* @param str
* @return
*/
public static String replace2(String regex, String str) {
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
String temp = m.replaceAll("$1");
return temp;
}
}
分享到:
相关推荐
- **合并与分割**:将两个线性表合并为一个,或者将一个线性表分割成两个。 **字符串** 字符串是线性表的一个特例,专门用于处理字符序列。在计算机科学中,字符串通常被看作是字符的线性序列,可以实现文本的处理...
后缀数组SA则是一个整数数组,长度同样为n,其中SA[i]表示第i个最小的后缀在原字符串中的起始位置。例如,对于字符串“banana”,其后缀数组为[6, 5, 3, 1, 2, 4],分别对应后缀“a”, “na”, “ana”, “banana”,...
在这个实验报告中,主要涉及了两个核心的知识点:一个是字符串操作,另一个是列表操作,都是在汇编语言的环境中进行的。 首先,我们来看字符串操作。实验要求将内存中长度不超过20个字节的ASCII字符串中的大写字母...
`pop()`和`push()`分别用于删除和添加数组末尾的元素,`shift()`和`unshift()`处理数组首部,`splice()`可以插入、删除和替换数组中的元素,`slice()`返回一个新的数组,`join()`将数组元素合并为字符串,`concat()`...
如果字符串 L 同时出现在字符串 A 和字符串 B 中,则称字符串 L 是字符串 A 和字符串 B 的公共子串。给定两个字符串 A 和 B,求最长公共子串。 例如,字符串“aaaba”和“abaa”的最长公共子串为“aba”。 Height ...
在LeetCode的第5题《最长回文子串》中,目标是找到给定字符串` s `中的最长回文子串。回文串是指正读反读都能读通的字符串,例如 "aba" 和 "abba" 都是回文串。本题要求的解决方案需在字符串长度不超过1000的限制内...
- 快速排序:利用分治法,选取一个基准元素,将数组分为两部分,分别对两边进行排序。 - 归并排序:同样采用分治策略,将数组拆分成小段,排序后再合并。 - 堆排序:利用堆这种数据结构进行排序,可以原地完成,...
12. IP地址拆分:将IP地址拆分为四个整数,理解字符串到整数的转换。 13. 前缀判断:使用字符串比较函数,如strncmp,检查字符串前缀。 14. 后缀判断:同样使用字符串比较函数,但需逆序处理,检查字符串后缀。 ...
在字符型函数部分,首先介绍的是CAT类函数,它们主要用于字符串连接,例如CATX和CATQ等,可以将多个字符变量或常量合并为一个单一的字符串。接着,COMPRESS函数用于删除字符串中的指定字符或空格,提高数据的整洁性...
后缀数组是将一个字符串的所有后缀按照字典序排序后的数组。例如,对于字符串 "banana",其后缀数组为 ["ana", "anaa", "anana", "banana", "bana", "ban"]。在实际计算中,直接对所有后缀进行排序是非常耗时的,...
1. 如何求一个字符串的所有排列 2. 如何求两个字符串的最长公共子串 3. 如何判断两个字符串是否为换位字符串 4. 如何判断两个字符串的包含关系 5. 如何对由大小写字母组成的字符数组排序 6. 如何消除字符串的内嵌...
字符串中的一个连续字符子序列被称为子串,包含子串的串称为该子串的主串。子串的位置通常由其在主串中第一个字符的位置来确定。 ### 字符串的存储结构 - **定长顺序串**:为字符串分配固定长度的空间。 - **堆串*...
`strs2str`可能是一个函数或变量,用于将一组字符串转换成另一种形式的字符串。例如,它可能使用`strjoin`函数将多个字符串合并,或者使用`regexprep`函数进行模式匹配和替换。 在处理`matlab开发-结构字段diffs12...
- KMP算法:用于高效地在字符串中查找子串。 - Rabin-Karp算法:通过哈希函数快速查找子串。 8. 计算几何:包括线段树、凸包算法、最近点对问题等。 这些算法都是计算机科学的基础,Python语言的简洁性和易读性...
- 实现一个函数来查找字符串中的子串。 - **判断两个字符串是否为异位词(Two Strings Are Anagrams)** - 判断两个字符串是否包含相同的字符。 - **比较字符串(Compare Strings)** - 比较两个字符串是否相等。 - *...
总之,“网易公开课中英字幕合并”涉及到C语言编程、文件操作、字符串处理、时间格式转换、数据结构和排序算法等多个IT知识点。通过这个项目,不仅可以提升编程技能,还能对多媒体处理有更深入的理解。在实践中,你...
- **最长公共子串(Longest Common Substring)**: 在两个字符串中找到长度最长的相同子串。 - **字符串旋转(Rotate String)**: 将字符串进行旋转操作。 - **反转单词(Reverse Words)**: 将字符串中的单词顺序反转。 -...