字符串问题之串移包含问题

/**
 * 字符和窜移位包含问题:
给定两个字符串s1(源字符串)和s2(目标字符串),
判断s2能否被通过s1作循环移位得到的字符串所包含。

1.循环移位,遍历各种可能,再判断字符串包含问题

2.利用性质(如果s2能被通过循环移位s1得到的字符串所包含,
则s2必须为s1.concat(s1)的字串)只要一次的字符串包含判断。

@author Sking
 */
package 字符串问题;

public class 串移包含 {
	
	/**
	 * 对源字符串进行循环移位,再进行是否包含目标字符串的判断,
	 * 从而遍历所有的可能性。
	 * @param src 源字符串
	 * @param dst 目标字符串
	 * @return  如果目标字符串被源字符串循环移位
	 *                        后的字符串包含,则返回true,否则false
	 */
	public static boolean rotateAndContains0(String src,String dst){
		int len=src.length();
		char[] srcArray=src.toCharArray();
		for(int i=0;i<len;i++){
			char tempChar=srcArray[0];
			for(int j=0;j<len-1;j++)
				srcArray[j]=srcArray[j+1];
			srcArray[len-1]=tempChar;
			if(new String(srcArray).contains(dst))
				return true;
		}
		return false;
	}
	
	/**
	 * 如果源字符串s1通过循环移位得到的字符串能包含目标
	 * 字符串s2,则目标字符串s2必为s1s1的字串。
	 * @param src 源字符串
	 * @param dst 目标字符串
	 * @return  如果目标字符串被源字符串循环移位
	 *                        后的字符串包含,则返回true,否则false
	 */
	public static boolean rotateAndContains1(String src,String dst){
		String srcsrc=src.concat(src);
		if(srcsrc.contains(dst))
			return true;
		else
			return false;
	}
}

你可能感兴趣的:(字符串问题之串移包含问题)