`
flyweilai
  • 浏览: 7852 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于“将字符串中相邻相同的子串合并为一个子串的代码”实现

阅读更多

 在网上看到一个面试题,要求

写道
将字符串中相邻相同的子串合并为一个子串,如"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;
	}

}

 

分享到:
评论

相关推荐

    数据结构(线性表和字符串部分)

    - **合并与分割**:将两个线性表合并为一个,或者将一个线性表分割成两个。 **字符串** 字符串是线性表的一个特例,专门用于处理字符序列。在计算机科学中,字符串通常被看作是字符的线性序列,可以实现文本的处理...

    列表与字符串操作实验报告

    在这个实验报告中,主要涉及了两个核心的知识点:一个是字符串操作,另一个是列表操作,都是在汇编语言的环境中进行的。 首先,我们来看字符串操作。实验要求将内存中长度不超过20个字节的ASCII字符串中的大写字母...

    字符串-关于字符串的创建-常见函数

    `pop()`和`push()`分别用于删除和添加数组末尾的元素,`shift()`和`unshift()`处理数组首部,`splice()`可以插入、删除和替换数组中的元素,`slice()`返回一个新的数组,`join()`将数组元素合并为字符串,`concat()`...

    后缀数组——罗穗骞ppt版

    如果字符串 L 同时出现在字符串 A 和字符串 B 中,则称字符串 L 是字符串 A 和字符串 B 的公共子串。给定两个字符串 A 和 B,求最长公共子串。 例如,字符串“aaaba”和“abaa”的最长公共子串为“aba”。 Height ...

    LeetCode5. 最长回文子串(双指针、中心扩展算法)

    在LeetCode的第5题《最长回文子串》中,目标是找到给定字符串` s `中的最长回文子串。回文串是指正读反读都能读通的字符串,例如 "aba" 和 "abba" 都是回文串。本题要求的解决方案需在字符串长度不超过1000的限制内...

    32种算法C语言具体实现代码

    - 快速排序:利用分治法,选取一个基准元素,将数组分为两部分,分别对两边进行排序。 - 归并排序:同样采用分治策略,将数组拆分成小段,排序后再合并。 - 堆排序:利用堆这种数据结构进行排序,可以原地完成,...

    "C语言程序设计大赛”模拟题库

    12. IP地址拆分:将IP地址拆分为四个整数,理解字符串到整数的转换。 13. 前缀判断:使用字符串比较函数,如strncmp,检查字符串前缀。 14. 后缀判断:同样使用字符串比较函数,但需逆序处理,检查字符串后缀。 ...

    人大经济论坛SAS中级视频教程讲义实用.pdf

    在字符型函数部分,首先介绍的是CAT类函数,它们主要用于字符串连接,例如CATX和CATQ等,可以将多个字符变量或常量合并为一个单一的字符串。接着,COMPRESS函数用于删除字符串中的指定字符或空格,提高数据的整洁性...

    后缀树组基础!!!!!

    后缀数组是将一个字符串的所有后缀按照字典序排序后的数组。例如,对于字符串 "banana",其后缀数组为 ["ana", "anaa", "anana", "banana", "bana", "ban"]。在实际计算中,直接对所有后缀进行排序是非常耗时的,...

    《C 程序员面试算法宝典》读书笔记模板x.pptx

    1. 如何求一个字符串的所有排列 2. 如何求两个字符串的最长公共子串 3. 如何判断两个字符串是否为换位字符串 4. 如何判断两个字符串的包含关系 5. 如何对由大小写字母组成的字符数组排序 6. 如何消除字符串的内嵌...

    数据结构及常用算法.docx

    字符串中的一个连续字符子序列被称为子串,包含子串的串称为该子串的主串。子串的位置通常由其在主串中第一个字符的位置来确定。 ### 字符串的存储结构 - **定长顺序串**:为字符串分配固定长度的空间。 - **堆串*...

    matlab开发-结构字段diffs12verboses1strs2str.zip.zip

    `strs2str`可能是一个函数或变量,用于将一组字符串转换成另一种形式的字符串。例如,它可能使用`strjoin`函数将多个字符串合并,或者使用`regexprep`函数进行模式匹配和替换。 在处理`matlab开发-结构字段diffs12...

    Python实现的各种算法,源代码

    - KMP算法:用于高效地在字符串中查找子串。 - Rabin-Karp算法:通过哈希函数快速查找子串。 8. 计算几何:包括线段树、凸包算法、最近点对问题等。 这些算法都是计算机科学的基础,Python语言的简洁性和易读性...

    lintcode算法分析和解答

    - 实现一个函数来查找字符串中的子串。 - **判断两个字符串是否为异位词(Two Strings Are Anagrams)** - 判断两个字符串是否包含相同的字符。 - **比较字符串(Compare Strings)** - 比较两个字符串是否相等。 - *...

    网易公开课中英字幕合并

    总之,“网易公开课中英字幕合并”涉及到C语言编程、文件操作、字符串处理、时间格式转换、数据结构和排序算法等多个IT知识点。通过这个项目,不仅可以提升编程技能,还能对多媒体处理有更深入的理解。在实践中,你...

Global site tag (gtag.js) - Google Analytics