算法心得

												每周一道算法题
				本周的算法题是对字符串进行排序
				题目描述

我的代码

大佬的代码
public class test{
public static void main(String[] args) {
String str [] = {“abc”,“Abc”,“123”,“1”,“1cb”,“CBD”,“abcd”,“a”};// 需要排序的字符串
for(int i=0;i<str.length;i++) {
for(int j=i+1;j<str.length;j++) {
if(longs(str[i],str[j])) {
String strs = str [i];
str [i] =str [j];
str [j]= strs;
}else {
continue;
}
}
}
for(int i=0;i<str.length;i++) {
System.out.println(str[i]);
}
}
public static boolean longs (String s1,String s2) { //比较字符串的长度,如果需要互换位置,返回true
if((s1.length())<(s2.length())) {
return false;
}else if(s1.length()>s2.length()) {
return true;
}else {
if(compare(s1,s2)) { //若字符串长度相同则利用fun函数进行判断
return true ;
}
}
return false;
}

public static boolean compare(String s1,String s2) {
	if(s1.equals(s2)) {    //判断俩个字符串是否相同
		return false ;
	}
	for(int i=0;i<s1.length();i++) {
		if((s1.charAt(i)>='A'&&s1.charAt(i)<='Z')&&(s2.charAt(i)>='a'&&s2.charAt(i)<='z')) {//s1 大写 s2小写
			if(s1.charAt(i)>s2.charAt(i)-32) {
				return true ;
			}else if(s1.charAt(i)==s2.charAt(i)-32) {
				return true ;
			}else {
				return false ;
			}
		}
		if((s1.charAt(i)>='a'&&s1.charAt(i)<='z')&&(s2.charAt(i)>='A'&&s2.charAt(i)<='Z')) {//s1小写  s2大写
			if(s1.charAt(i)-32>s2.charAt(i)) {
				return true ;
			}else if(s1.charAt(i)-32==s2.charAt(i)) {
				return true ;
			}else {
				return false ;
			}
			}
		if((s1.charAt(i)>='A'&&s1.charAt(i)<='Z')&&(s2.charAt(i)>='A'&&s2.charAt(i)<='Z')) { //同大写
			if(s1.charAt(i)>s2.charAt(i)) {
				return true ;
			}else if(s1.charAt(i)==s2.charAt(i)) {
				continue;
			}else {
				return false;
			}
		}
		if((s1.charAt(i)>='a'&&s1.charAt(i)<='z')&&(s2.charAt(i)>='a'&&s2.charAt(i)<='z')) { //同小写
			if(s1.charAt(i)>s2.charAt(i)) {
				return true ;
			}else if(s1.charAt(i)==s2.charAt(i)) {
				continue;
			}else {
				return false;
			}
		}
		if(s1.charAt(i)<s2.charAt(i)) {   //其他情况
			return true ;
		}else if(s1.charAt(i)==s1.charAt(i)) {
			continue;
		}else {
			return false;
		}
		
	}
	return false;
}

}
做题过程:
看到这道题我想的是用一个字符串数组来动态定义字符串,然后先比较他们的长度,长度大的往前排(冒泡排序),然后再将字符串转变成char数组,然后比较他们之间的首元素 如果是数字就往后排,如果是其他的就比较他们的char类型转换成int类型的数字的大小,从而实现对于字符串首字母大小写的排序,但是当我看到大佬的代码时我发现我考虑的真的是太少了,大佬利用boolean方法返回true false 来判断长度 以及数组中的字符串的大小写在判断数组中大小写方法 大老考虑的比较全面,同大写 小写 一大一小 还有其他条件都考虑到了,还有就是比较的时候使用了大写+32 小写-32的方法来进行同类型的比较最后从而实现对于字符串的排序。
做题心得
因为平时很少用boolean算法,或者是几乎不用,然后导致就忘记了这个方法的重要性,所以这道题想的就是各种条件判断各种循环,到了做后就发现什么都不行了也改不了,然后这道题就很难做出来了,平时还是对方法用得少,平时都是能用最少的方法解决问题就是最好的,然后方法就最常见的就是main方法还有其他的一些方法,但是几乎每到算法题 都不喜欢用多个方法,都喜欢用一个方法解决,当看到这道题后才发现方法的重要性,我以后再做算法题会多考虑,多思考,多用些方法,可以把这道题给解出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值