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