这个程序是用来去除一个字符串中的冗余字符的,我设计了两个数据结构,
一个是result(list类)用来记录结果,和原字符串的顺序一致,一个是sort(LinkedTable类)用来记录该字符串的字典序
对于每个新字符来说,如果它没有在字典序中出现,则它就是新元素加到结果集中,如果它出现在字典序中,则它就是冗余字符应该剔除不应该放在结果集中
判断有没有在字典序中有4个条件:
1、字典序为空,则为新元素;
2、字典序不为空,遍历该字典序,直到字典不再小于当前元素值或者遍历完整个链表停止;
3、若遍历完整个链表,则为新元素,并且是目前字典中最大的值;
4、若没有遍历完整个链表,则若是因为等于而停止,则为旧元素,若是因为大于而停止,则为新元素,将该元素加到适当的位置。
该程序对中文字符同样适用。
Java代码:
package A;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
//Node这个类是用来描述一个链表中的元素,包括两部分:数据和下一个元素的位置
class Node{
private String data;
private Node next;
public Node(String data){
this.data=data;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
//LinkedTable是链表类,包括一个头指针成员,函数有判断是否为空和判断当前值是否在链表中并且插入到相应的位置两个
class LinkedTable{
private Node head;
public LinkedTable(Node head){
this.head=head;
}
public boolean isEmpty() {
return head==null;
}
//链表中存储字典序,判断当前值是否在链表中,并且插入到相应的位置
public boolean containsAndinsert(String data){
Node newnode=new Node(data);
if(isEmpty()){
head=newnode;
return false;
}
else{
Node p = head;
Node pre = head;
while(p!=null&&p.getData().compareToIgnoreCase(data)<0){
pre=p;
p=p.getNext();
}
if(p==null){
pre.setNext(newnode);
return false;
}else if(p.getData().compareToIgnoreCase(data)>0){
//若是字典大于当前值,则将当前值插入到字典中,如果插入的位置为head,则要修改head指针,否则会出现
//Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
//因为按照正常的插入流程,p,pre,head指向同一个元素,该新元素和head组成了循环链表
newnode.setNext(p);
if(p==head)
head=newnode;
else
pre.setNext(newnode);
return false;
}
}
return true;
}
public String display(){
Node p=head;
StringBuffer sb=new StringBuffer();
while(p!=null){
sb.append(p.getData());
p=p.getNext();
}
return sb.toString();
}
public Node getHead() {
return head;
}
public void setHead(Node head) {
this.head = head;
}
}
/*这个程序是用来去除一个字符串中的冗余字符的,我设计了两个数据结构,
一个是result(list类)用来记录结果,和原字符串的顺序一致,一个是sort(LinkedTable类)用来记录该字符串的字典序
对于每个新字符来说,如果它没有在字典序中出现,则它就是新元素加到结果集中,如果它出现在字典序中,则它就是冗余字符应该剔除不应该放在结果集中
判断有没有在字典序中有4个条件:
1、字典序为空,则为新元素;
2、字典序不为空,遍历该字典序,直到字典不再小于当前元素值或者遍历完整个链表停止;
3、若遍历完整个链表,则为新元素,并且是目前字典中最大的值;
4、若没有遍历完整个链表,则若是因为等于而停止,则为旧元素,若是因为大于而停止,则为新元素,将该元素加到适当的位置。
该程序对中文字符同样适用。
by YXQ 20110329
*/
public class deteleredundancy {
public static void main(String[] args) {
String str[] = {"1","d","c","%","*","%","%","*","%","%","*","%"};
//System.out.println(deleteDouble(str));
deteleredundancy dr=new deteleredundancy();
//int a="a".compareToIgnoreCase("中");
//System.out.println(a);
dr.delete(str);
}
private void delete(String s[]){
List<String> result=new LinkedList<String>();
LinkedTable sort=new LinkedTable(null);
for (String ss:s) {
if(!sort.containsAndinsert(ss)){
result.add(ss);
}
}
System.out.println("This string's sort is :");
System.out.println(sort.display());
Iterator i=result.iterator();
StringBuffer sb=new StringBuffer();
while (i.hasNext()) {
sb.append(i.next().toString());
}
System.out.println("This string's result is :");
System.out.println(sb.toString());
}
}
分享到:
相关推荐
deline库利用ES6的字符串处理功能,提供了一个简洁的方法来消除这些冗余的换行。它的核心思想是解析字符串,识别并合并连续的换行符,只保留必要的行间隔。这种方法可以确保文本在展示时保持适当的格式,同时避免了...
2. **字符串分割**:使用`split()`函数将字符串按照指定分隔符进行切割,返回一个字符串列表。 3. **查找与替换**:`find()`和`replace()`函数分别用于查找子字符串的位置和替换子字符串。 4. **大小写转换**:`...
为了解决这个问题,开发者创建了"Go-stringish",一个可链式字符串处理库,旨在简化和优化字符串处理过程,减少代码中的复杂性和冗余。 `stringish`库的核心特性在于它的链式方法调用,这种模式常见于JavaScript等...
现在,当我们说要去除字符串中的反斜杠时,通常是指去掉那些不需要被解释为特殊字符的反斜杠,比如文件路径中的一些冗余反斜杠。在C#中,去除字符串中的反斜杠通常涉及到将`\\`替换为空字符串`""`。 例如,假设有一...
在网络安全中,随机字符串通常用于生成一次性密码(OTP)、加密密钥、验证码等,因为它们难以被猜测或破解。真正的随机性是通过随机数生成器(RNG)来实现的,这可以是硬件RNG,也可以是软件实现的伪随机数生成器...
本项目提供的是一款Json字符串格式化规范化工具的源码,其主要功能包括对Json字符串进行美化格式化和压缩去除冗余空白字符。 首先,让我们深入理解Json的基本结构。Json由键值对构成,键必须用双引号括起,值可以是...
总的来说,这个Python脚本提供了一个自动化解决方案,帮助开发者清理Android工程中的冗余字符串,提高资源管理的效率,同时减少了应用的大小和潜在的运行时问题。在实际项目中,可以根据需要调整和优化此脚本,以...
总之,"flow command conversion.vi"是一个实现LabVIEW与Flow-X485仪表间高效通信的关键工具,它将字符串指令转化为仪表可识别的十六进制格式,确保了数据准确无误地传输。通过学习和理解这个VI的工作原理,你可以在...
例如,如果你有一个包含特殊字符的字符串`'Hello, World! @#$%^&*()'`,你可以使用`REPLACE()`函数去除逗号、感叹号和特殊字符: ```sql DECLARE @str NVARCHAR(MAX) = 'Hello, World! @#$%^&*()' SELECT REPLACE...
首先,字符串压缩的原理通常是利用数据的冗余性和统计特性来减少其占用的存储空间。在英文文本中,某些单词或字符的出现频率较高,这为压缩提供了可能。一种常见的压缩方法是霍夫曼编码(Huffman Coding),它基于...
在JavaScript中,数组和字符串去重是一个常见的操作,尤其在处理数据时,我们经常需要去除数组或字符串中的重复元素,以避免数据冗余或者在逻辑上保持唯一性。针对这一需求,JavaScript提供了一些内置的方法和技巧来...
需要注意的是:这是工控通讯版,针对工控通讯中用到的循环冗余校验CRC16和纵向冗余校验LRC,所以仅支持字符串校验,不对文件进行校验。网络上的校验软件没有能符合神港通讯说明书校验结果的,只有这个软件的校验结果...
在C语言中,`printf`函数是一个非常重要的输出函数,用于格式化输出数据。它能够按照程序员指定的格式打印各种类型的数据,其中`%g`是一个特殊的格式字符,用于以最简洁的方式输出浮点数,兼顾`%f`和`%e`的优点。 `...
再定义一个变量`@times`来记录需要替换的次数,这是通过计算字符串中连续分隔符的数量得到的。 代码如下: ```sql -- 去除字符串中连续的分隔符 DECLARE @str nvarchar(200) DECLARE @split nvarchar(200), @times...
这个工具提供了一个简洁的方法,去除字符串中的冗余字符和不必要的空格,使得处理后的字符串更加规范,方便后续的分析和操作。下面将详细介绍这个工具的核心知识点以及如何在MATLAB中进行相关的操作。 1. **字符串...
在上面的代码中,我们定义了一个 `isPalindrome` 方法,该方法接收一个字符串作为参数,并返回一个布尔值表示该字符串是否是回文字符串。具体的实现思路如下: 首先,通过使用正则表达式和 `replaceAll` 方法去除...
如果存在,则继续读取下一个字符,将其添加到当前字符串末尾,并检查新字符串是否也在表中。如果不存在,则输出当前字符串对应的编码,并将新字符串添加到字符串表中。 3. **结束阶段**:当所有输入数据都被处理...
### BV主动作用于杂项和II型字符串字段理论的关键知识点 #### 1. 引言与背景 在传统的超弦理论框架下,S矩阵(即散射矩阵)中关于壳上态的表述是通过在黎曼曲面上积分的共形不变顶点算符的相关函数来表达的。这一...
接着,创建一个字节数组,遍历16进制字符串,将每两个字符解析为一个字节,并存储在字节数组中。最后,使用相同的字符编码将字节数组转换回汉字字符串。 接下来,`Class_SerialPort`类是实现串口通信的核心。虽然在...
**WMAD-JavaScript-String-Library** 是一个专门针对字符串操作的JavaScript库,它提供了一系列高效且实用的方法,帮助开发者在JavaScript环境中更方便地处理字符串。这个库旨在简化常见的字符串操作,提升开发效率...