顺序串的基本算法设计java代码
时间: 2023-06-10 18:04:09 浏览: 89
好的,关于顺序串的基本算法设计Java代码,这里是一个简单的实现:
```
public class SeqString {
private char[] data; // 存储串的字符数组
private int length; // 串的长度
// 构造方法定义
public SeqString() {
data = new char[0];
length = 0;
}
public SeqString(SeqString str) {
this(str.toString());
}
public SeqString(String str) {
length = str.length();
data = new char[length];
str.getChars(0, length, data, 0);
}
public SeqString(char[] value) {
this(value, value.length);
}
public SeqString(char[] value, int len) {
if (len > value.length) {
len = value.length;
}
data = new char[len];
length = len;
System.arraycopy(value, 0, data, 0, length);
}
// 获取字符在串中的位置
public int indexOf(SeqString str) {
return indexOf(str, 0);
}
public int indexOf(String str) {
return indexOf(new SeqString(str), 0);
}
public int indexOf(SeqString str, int fromIndex) {
if (fromIndex < 0) {
fromIndex = 0;
}
if (str.length > length || fromIndex >= length) {
return -1;
}
if (str.length == 0) {
return fromIndex;
}
char[] seq = str.toCharArray();
int[] next = getNext(seq);
int i = fromIndex, j = 0;
while (i < length && j < str.length) {
if (j == -1 || data[i] == seq[j]) {
i++;
j++;
} else {
j = next[j];
}
}
if (j == str.length) {
return i - j;
} else {
return -1;
}
}
private int[] getNext(char[] seq) {
int[] next = new int[seq.length];
next[0] = -1;
int i = 0, j = -1;
while (i < seq.length - 1) {
if (j == -1 || seq[i] == seq[j]) {
i++;
j++;
next[i] = j;
} else {
j = next[j];
}
}
return next;
}
// 获取子串
public SeqString substring(int beginIndex) {
return substring(beginIndex, length);
}
public SeqString substring(int beginIndex, int endIndex) {
if (beginIndex < 0) {
beginIndex = 0;
}
if (endIndex > length) {
endIndex = length;
}
if (beginIndex > endIndex) {
throw new IllegalArgumentException("beginIndex不能大于endIndex!");
}
char[] seq = new char[endIndex - beginIndex];
System.arraycopy(data, beginIndex, seq, 0, endIndex - beginIndex);
return new SeqString(seq);
}
// 重写toString()方法
public String toString() {
return new String(data);
}
}
```
这个算法实现提供了一些常规操作,比如获取子串、获取字符在串中的位置等等。注意到,在获取位置时,这里使用了KMP算法,这也是顺序串经常使用的字符串匹配算法。如果需要更加详细及完整的实现,可以参考下面的链接:
https://blog.csdn.net/weixin_42449836/article/details/80279631
希望这个简单的实现可以对您有所帮助!
阅读全文