实现基于链表结构的字符串匹配算法
时间: 2023-10-23 22:10:58 浏览: 157
链表结构的字符串匹配算法可以使用双指针法实现。
具体步骤如下:
1. 定义链表结构,并在链表节点中存储字符串的每个字符。
2. 定义两个指针p和q,分别指向待匹配字符串和目标字符串的开头。
3. 从目标字符串的开头开始遍历链表,比较链表节点中存储的字符和p指向的字符是否相同。
4. 如果相同,则将p和q指针都向后移动一位,继续比较下一个字符。
5. 如果不同,则将q指针向后移动一位,并将p指针重新指向待匹配字符串的开头,继续从目标字符串的下一个字符开始匹配。
6. 如果p指针遍历完了待匹配字符串,说明匹配成功,返回目标字符串的起始位置;否则,目标字符串中不存在待匹配的字符串,返回null。
代码实现如下:
```
class ListNode {
char val;
ListNode next;
ListNode(char x) { val = x; }
}
public class StringMatch {
public static ListNode createLinkedList(char[] chars) {
ListNode head = new ListNode(chars[0]);
ListNode cur = head;
for (int i = 1; i < chars.length; i++) {
ListNode node = new ListNode(chars[i]);
cur.next = node;
cur = node;
}
return head;
}
public static ListNode match(ListNode head, String str) {
ListNode p = head;
ListNode q = head;
int len = str.length();
int count = 0;
while (q != null) {
if (q.val == str.charAt(count)) {
count++;
if (count == len) {
return p;
}
p = p.next;
q = q.next;
} else {
p = head;
q = q.next;
count = 0;
}
}
return null;
}
public static void main(String[] args) {
char[] chars = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'};
ListNode head = createLinkedList(chars);
String str = "def";
ListNode result = match(head, str);
if (result != null) {
System.out.println("Matched at position " + result.val);
} else {
System.out.println("Not matched.");
}
}
}
```
阅读全文