Java比较中文字符串--振兴中华

本文介绍了一种解决跳格子游戏路径计算问题的方法,利用递归搜索算法找到所有能够拼成特定字符串的路径,并解决了中文字符比较的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标题: 振兴中华
    小明参加了学校的趣味运动会,其中的一个项目是:跳格子。
    地上画着一些格子,每个格子里写一个字,如下所示:(也可参见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("从我做起振兴中华"));
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值