字符串問題之串移包含問題

/**
 * 字符和竄移位包含問題:
給定兩個字符串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;
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章