【Java练习】获取两个字符串中最长的相同字段

获取两个字符串中最长的子串并输出。

思路解析:

1.首先考虑我们要知道长度最短的字符串,这样子在比较的次数会更少。

2.我们首先从长度最小的字符串每次截取一小段判断是否在大串中

3.考虑到有可能有多个长度相同的子串,那么我们就应该将他们同时保存到集合中

4.要多考虑到各种异常的发生。

以下是我写的代码,主要用于练习用,不喜勿喷,欢迎指正,谨以此温习Java基础。

package com.yaml.procties;

import java.util.ArrayList;
import java.util.List;

/**
 * @author
 * @date
 * @version
 * @Description 获取两个字符串具有最大共同的子串
 */
public class GetMaxComStr {

	public static void main(String[] args) {

		String str1 = "abcxxaddfnnn";
		String str2 = "aabcddaddgnnn";

		List<String> theMaxComStr = getTheMaxComStr(str1, str2);
		if(theMaxComStr != null || theMaxComStr.size()> 0){
			System.out.println(theMaxComStr.toString());
		}
		
		
	}

	/**
	 * @author
	 * @date
	 * @parameter str1:表示待比较的第一个字符串 str2:表示待比较的第二个字符串
	 * @return 共同的最大的子串
	 * @throws @override
	 */
	public static List<String> getTheMaxComStr(String str1, String str2) {

		if(str1 == null || str2 == null || str1.isEmpty() || str2.isEmpty()){
			return null;
		}
		
		String max = str1.length() >= str2.length() ? str1 : str2;
		String min = max == str1 ? str2 : str1;

		String theMaxComStr = "";
		boolean isNewComStr = true;
		List<String> maxComList = null;
		for (int i = 0; i < min.length(); i++) {
			for (int j = 0; j < min.length() - i; j++) {
				String subStr = min.substring(i, i + j + 1);
				if (isNewComStr) {
					maxComList = new ArrayList<String>();
					maxComList.add(theMaxComStr);
					isNewComStr = false;
				}

				if (max.indexOf(subStr) != -1) {
					if (theMaxComStr.length() < subStr.length()) {
						theMaxComStr = subStr;
						isNewComStr = true;
					}

					if (theMaxComStr.length() == subStr.length())
						maxComList.add(subStr);
				}
			}
		}

		return maxComList;
	}

}

猜你喜欢

转载自blog.csdn.net/oXiangShuiYouDu/article/details/81176844