java实现字符串单词接龙

本文介绍了如何使用Java编程语言实现一个简单的单词接龙游戏,给定一个单词数组和起始单词,通过查找满足接龙规则的最长单词序列,最后输出拼接后的字符串。
摘要由CSDN通过智能技术生成

java实现字符串单词接龙


描述

单词接龙的规则是:
。可用于接龙的单词首字母必须要前一个单词的尾字母相同;
。当存在多个首字母相同的单词时,取长度最长的单词,如果长也相等,则取字典序最小的单词;已经參与接龙的单词不能重复使用;
。现给定一组全部由小写字母组成单词数组,并指定其中的一个单词作为起始单词,进行单词接龙;
。请输出最长的单词串,单词串是单词拼接而成,中间没有空。

输入描述:
。输入的第一行为一个非负整数,表示起始单词在数组中的索引K,0<=K<N;
。输入的第二行为一个非负整数,表示单词的个数N
。接下来的N行,分别表示单词数组中的单词。

备注:
。单词个数N的取值范围为[1,20];
。单个单词的长度的取值范围为[1,30]。

输出描述:
。输出一个字符串,表示最终拼接的单词串。

用例:

输入:
0
6
word, dd, da, dc, dword, d

输出:
worddwordda

java实现(开箱即用)

package com.des.data.test;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class WordChain {

    public static void main(String[] args) {
        int k = 4;
        int n = 6;
        String[] strs = {"word", "dd", "da", "dc", "dword", "d"};
        System.out.println(solution(0,strs));
    }

    public static String solution(int m, String[] strs) {
        StringBuffer stres = new StringBuffer();
        String startStr = strs[m];
        stres.append(startStr);
        char startc = startStr.charAt(startStr.length() - 1);
        List<String> strArr = Arrays.stream(strs).filter(p -> p != startStr).collect(Collectors.toList());
        for (int i = 0; i < strArr.size(); i++) {
            char finalStartc = startc;
            List<String> strsl = strArr.stream().filter(p -> p.charAt(0) == finalStartc).collect(Collectors.toList());
            if (strsl.isEmpty()) {
                break;
            }
            int len = 0;
            //找出长度最长的字符串
            for (int j = 0; j < strsl.size(); j++) {
                String strl = strsl.get(j);
                if (strl.length() > len) {
                    len = strl.length();
                }
            }
            int finalLen = len;
            List<String> strsll = strArr.stream().filter(p -> p.length() == finalLen).collect(Collectors.toList());
            String[] arrayN = strsll.toArray(new String[strsll.size()]);
            //冒泡
            for (int j = 0; j < arrayN.length; j++) {
                for (int k = 0; k < arrayN.length - j - 1; k++) {
                    if (arrayN[k].compareTo(arrayN[k + 1]) > 0) {
                        String tmp = arrayN[k];
                        arrayN[k] = arrayN[k + 1];
                        arrayN[k + 1] = tmp;
                    }
                }
            }
            String getStr = arrayN[0];
            stres.append(arrayN[0]);
            //循环一轮结束,初始化接龙开头字母 startc
            startc = getStr.charAt(getStr.length() - 1);
            //循环一轮结束,初始化strArr
            strArr = Arrays.stream(strs).filter(p -> p != getStr).collect(Collectors.toList());
            if (strArr.isEmpty()) {
                break;
            }
        }
        return stres.toString();
    }
}
  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值