每周一道算法题
本周的算法题是对字符串进行排序
题目描述
我的代码
大佬的代码
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方法还有其他的一些方法,但是几乎每到算法题 都不喜欢用多个方法,都喜欢用一个方法解决,当看到这道题后才发现方法的重要性,我以后再做算法题会多考虑,多思考,多用些方法,可以把这道题给解出来。