字符串链Java实现

问题描述:

牛牛很喜欢玩接龙游戏,一天他突发奇想,发明了一种叫做“字符串链”的游戏。 这个游戏的规则是这样的,给出3个字符串A,B,C,如果它们满足以下两个条件,那么就可以构成一个“字符串链”:  

1.A的最后一个字母和B的第一个字母相同; 

2.B的最后一个字母和C的第一个字母相同。 

现在牛牛给出了3个字符串A,B,C,希望你能判断这3个字符串能否构成一个“字符串链”,若能则输出“YES”,否则输出“NO”。

详细代码如下:

package Exer;

import java.util.Scanner;
import java.util.ArrayList;import java.util.Arrays;
public class StringLinked {

	public static void main(String[] args) {
       //得到3个字符串A,B,C
		Scanner s1=new Scanner(System.in);
		String A=s1.nextLine();
		Scanner s2=new Scanner(System.in);
		String B=s2.nextLine();
		Scanner s3=new Scanner(System.in);
		String C=s3.nextLine();
		//转换成char数组
		char[] a=A.toCharArray();
		char[] b=B.toCharArray();
		char[] c=C.toCharArray();
		
		if ((a[a.length-1]==b[0])&&(b[b.length-1]==c[0])) {
			System.out.println("YES");
		}else {
			System.out.println("NO");
		}
		
		
		
	}

}

我们尝试一下结果,

dgfjhsdgfjshd

dhkjhkjhkj

jdjhfgjhs

YES

djfhgkjdfhg

fhjsdgfjhd

dhgiusd

NO

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
串的式存储结构是指将字符串中的每一个字符存储在一个结点中,然后使用指针将这些结点连接起来,形成一个表。以下是Java实现串的式存储结构的简单匹配算法的完整源码: ```java public class StringMatch { /** * 串式存储结构 */ static class Node { char data; Node next; public Node(char data) { this.data = data; } } /** * 简单匹配算法 * * @param s 串 * @param p 模式串 * @return 匹配成功时返回第一次匹配的位置,否则返回-1 */ public static int match(Node s, Node p) { Node i = s; // i指向文本串中当前比较的字符 Node j = p; // j指向模式串中当前比较的字符 Node k = null; // k指向文本串中当前需要回溯的位置 while (i != null && j != null) { if (i.data == j.data) { i = i.next; j = j.next; } else { k = k == null ? s : k.next; i = k; j = p; } } if (j == null) { return k == null ? 0 : indexOf(s, k); } else { return -1; } } /** * 在文本串中查找子串的起始位置 * * @param s 文本串 * @param p 子串 * @return 子串在文本串中第一次出现的位置,如果不存在则返回-1 */ public static int indexOf(Node s, Node p) { int i = 0; Node j = s; while (j != null) { if (match(j, p) != -1) { return i; } i++; j = j.next; } return -1; } public static void main(String[] args) { String s = "abcbcabc"; String p = "abc"; Node sNode = buildList(s); Node pNode = buildList(p); int pos = indexOf(sNode, pNode); if (pos == -1) { System.out.println("未找到匹配的子串"); } else { System.out.println("子串\"" + p + "\"在文本串\"" + s + "\"中第一次出现的位置为:" + pos); } } /** * 将字符串转换为表 */ private static Node buildList(String str) { Node head = null; Node tail = null; for (int i = 0; i < str.length(); i++) { Node node = new Node(str.charAt(i)); if (head == null) { head = node; tail = node; } else { tail.next = node; tail = node; } } return head; } } ``` 在主函数中,我们可以将文本串和模式串转换为表,并将它们传递给indexOf方法进行匹配。如果匹配成功,indexOf方法将返回第一次匹配的位置,否则返回-1。在简单匹配算法中,我们使用i和j指针分别指向文本串和模式串中当前比较的字符,如果当前字符匹配成功,则将指针向后移动一位。如果当前字符匹配失败,则将i指针回溯到k指向的位置,并将j指针重新指向模式串的起始位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值