1. 程式人生 > >Java比較中文字串--振興中華

Java比較中文字串--振興中華

標題: 振興中華     小明參加了學校的趣味運動會,其中的一個專案是:跳格子。     地上畫著一些格子,每個格子裡寫一個字,如下所示:(也可參見p1.jpg) 從我做起振
我做起振興
做起振興中
起振興中華
    比賽時,先站在左上角的寫著“從”字的格子裡,可以橫向或縱向跳到相鄰的格子裡,但不能跳到對角的格子或其它位置。一直要跳到“華”字結束。
    要求跳過的路線剛好構成“從我做起振興中華”這句話。     請你幫助小明算一算他一共有多少種可能的跳躍路線呢? 這題有規律就不說了,就是a[i][j]=a[i-1][j]+a[i][j-1]; 根據題目給出的圖來看出,那麼我寫一個一般的解決方法(不是針對本題的圖),就是搜尋了唄,這個也很簡單,但是我遇到了一個問題就是在比較中文的時候,使用 以前的方法怎麼都比較不出來,就是equals和compare方法,後來我查閱到使用一個Collator類才得以解決,其實就是對各種語言進行本地化的一個類吧。上程式碼
import java.text.Collator;
import java.util.*;

public class Main {
    static Scanner in = new Scanner(System.in);
    static int n,m,ans,k;
    static String com ;
    static char[][] maze  = new char[100][100];
    static char[] res = new char[10];
    static String[] ss = new String[1000];
    static boolean[][] vis = new boolean[100][100];
    static int[][] dir= {{0,1},{1,0},{0,-1},{-1,0}};
    //就是這個類,類似還可以比較其他語言
    static Collator co = Collator.getInstance(Locale.CHINA);
    static void find(int x,int y,int sp) {
    	if(sp>=8) {
    		String s = new String(res);
    		//System.out.println(s+" "+com+" "+co.compare(s, com));
    	 if(co.compare(s, com)==0)
   			   ans++;
    		return;
    	}
    	int tx,ty;
    	for(int i = 0;i < 4;i++) {
    		tx = x + dir[i][0];
    		ty = y + dir[i][1];
    		if(tx<0||ty<0||tx>=n||ty>=m||vis[tx][ty])
    			continue;
    		vis[tx][ty]=true;
    		res[sp]=maze[tx][ty];
    		find(tx,ty,sp+1);
    		vis[tx][ty]=false;
    	}
    }
	public static void main(String[] args) {
		 n = in.nextInt();
		 m = in.nextInt();
		 String s ;
		 com = "從我做起振興中華";
		 for(int i = 0;i < n;i++) {
			 s = in.next();
			 for(int j = 0;j < s.length();j++) {
				 vis[i][j]=false;
				 maze[i][j]=s.charAt(j);
			 }
		 }
		 res[0]='從';
		 find(0,0,1);
		System.out.println(ans);
		//System.out.println("從我做起振興中華".equals("從我做起振興中華"));
	}

}