将一个字符串数组中的字母按照以下规则排列

 将一个字符串数组中的字母按照以下规则排列:表中任何单词的首字母与其前面单词的尾字母相同! 要求:字符串只由小写字母构成,且每个字符串长度在2-100之间


import java.util.ArrayList;
import java.util.Iterator;

public class Test {
    public static int canArrangeWords(String[] arrys) {
        ArrayList<String[]> arry = new ArrayList<String[]>();
        ArrayList<String> alist = new ArrayList<String>();
        ;
        for (int ii = 0; ii < arrys.length; ii++) {
            arry.add(arrys);            //为arry分配内存空间;  
        }
        if (jmarrys(arrys))             //判断字符串数组中的字符串是否满足要求;  
        {
            //第i1次进行字符串提取,找到符合要求的字符串将其保持至alist中,并在数组中删除该字符串;循环执行,直到数组中只剩一个元素;  
            //循环次数为arry.size()-1,表示每次提取字符串,需要数组中存在至少两个元素;  
            for (int i1 = 0; i1 < arry.size() - 1; i1++) {
                String[] split = null;
                ArrayList<String> aaList = new ArrayList<String>();
                String[] lingshi = arry.get(i1);
                if (tiqu(lingshi) != null) {        //判断所提取的字符串是否为空;
                    split = tiqu(lingshi).split("\\+"); //将字符串按+号分割,第一个元素为提取的字符串,第二个元素为该字符串尾字母匹配的字符串索引;
                    alist.add(split[0]);
                    //获取与提取字符串尾字母匹配的字符串,并将其放置字符串数组第一位;  
                    int b1 = Integer.parseInt(split[1]);
                    String st = lingshi[0];
                    lingshi[0] = lingshi[b1];
                    lingshi[b1] = st;
                }
                //在字符串数组中删除所提取的字符串,并将删除后的数组赋给一个新的字符串数组,  
                for (int k = 0; k < arry.get(i1).length; k++)
                    aaList.add(arry.get(i1)[k]);
                aaList.remove(split[0]);
                String[] newText = new String[aaList.size()];
                arry.set(i1 + 1, aaList.toArray(newText));
            }
            //当字符串数组中只剩下最后一个元素时,直接将该元素添加到alist中;  
            String[] lingshi2 = arry.get(arry.size() - 1);
            alist.add(lingshi2[0]);
        }
        if (alist.size() == arrys.length) {
            Iterator<String> iterator = alist.iterator();
            while (iterator.hasNext()) {
                String testString = (String) iterator.next();
                System.out.print(testString + " ");
            }
            System.out.println();
            return 1;
        }
        return -1;
    }

    /**
     * tiqu(String[] arrys):用于提取字符串数组中,其尾字母在数组中存在匹配首字母项,
     * 且其首字母在数组中不存在匹配项的字符串;
     *
     * @param arrys:传入一个字符串数组;
     * @return:用于返回所提取字符串值及其索引和,与该字符串尾字母匹配的字符串索引;
     */
    public static String tiqu(String[] arrys) {
        String str22 = null;
        outer:
        for (int i = 0; i < arrys.length; i++) {
            for (int j = 0; j < arrys.length; j++) {
                if (arrys[i] == arrys[j])
                    continue;
                if (equal(arrys[i], arrys[j])) {
                    for (int j1 = 0; j1 < arrys.length; j1++) {
                        if (arrys[i] == arrys[j1])
                            continue;
                        if (equal(arrys[j1], arrys[i])) {
                            continue outer;
                        } else if (!equal(arrys[j1], arrys[i])) {

                            str22 = String.valueOf(j);
                            return arrys[i] + "+" + j;
                        }
                    }
                }
            }
        }
        return null;
    }

    /**
     * equal():用于判断a1的尾字母和a2的首字母是否相等;
     *
     * @return 相等返回true,否则返回false;
     */
    public static boolean equal(String a1, String a2) {
        if ((a1 != null) && (a2 != null)) {
            char[] ch1 = a1.toCharArray();
            char[] ch2 = a2.toCharArray();
            if (ch1[ch1.length - 1] == ch2[0])
                return true;
        }
        return false;
    }

    public static boolean jmarrys(String[] arrys) {
        int l = arrys.length;
        for (int i = 0; i < l; i++) {
            char[] ch = arrys[i].toCharArray();
            int l1 = ch.length;
            if (l1 >= 2 && l1 <= 100) {
                for (int j = 0; j < l1; j++) {
                    if (ch[j] >= 'a' && ch[j] <= 'z')
                        return true;
                }
            }
        }
        return false;
    }

    public static void main(String[] args) {
        String[] strings = {"dfgc", "abcd", "cdaf", "fe", "emn"};
        int s = canArrangeWords(strings);
        System.out.println(s);
    }
}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值