判断一个字符串数组是否能组成首尾相连的环

题目
输入一组字符串 判断字符串是否组成环
例如:
输入:aes dwewe ea sd
输出:true
输入:as st ta
输出:false
解题思路
总体思想就是当前字符串找到一个能连接的就继续找能接上的,最后原字符串数组只剩下一个字符串的时候,一个的首是否等于另一个尾。满足就是环。
解体方法
从某一个字符串A开始 判断当前 A的末尾字符 与除A外的其他字符头是否相等?假设存在B满足上述,那么B的末尾判断除A B外剩下的list(移除A、B)。如果一直满足上述,说明一直有字符串可以连接。最后list变成只有一个字符串的时候,判断当前字符串与A是否可以组成环。 两字字符串可以组成环,说明一个的首字符等于另一个的尾。 因为判断环 有环的话 就是从环内任何一个字符串开始 最后都能将list变为只有一个字符的。
源代码

import java.util.*;

public class StrOrgEnd {
	public static void main(String[] args) {
	     System.out.println(isContainsRing(new String[]{"ab", "bf", "ga", "fg"}));
	}
	private static boolean isContainsRing(String[] str) {
        List<String> list = new ArrayList<>(Arrays.asList(str));
        String s = list.get(0);//取出第一个字符串
        char c = s.charAt(0);
        list.remove(0);
        if (findCircle(s, list, c)) {
            return true;
        } else {
            return false;
        }
    }

    private static boolean findCircle(String s, List<String> strlist, char c) {
        if (strlist.size() == 1 && c == strlist.get(0).charAt(strlist.get(0).length() - 1))//字符串数组长度为2,并且能形成环
            if (s.charAt(s.length() - 1) == strlist.get(0).charAt(0))
                return true;
            char tail = s.charAt(s.length() - 1);
            for (int i = 0; i < strlist.size(); i++) {
            if (tail == strlist.get(i).charAt(0)) {
                List<String> newlist = new ArrayList<>(strlist);
                newlist.remove(i);//匹配则删除第i个字符串
                if (findCircle(strlist.get(i), newlist, c)) {
                    return true;
                }
            }
        }
        return false;
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值