之间的博客,承上启下:
Java基础 String/StringBuff 常用操作方法复习/内存分析
Java数组直接选择排序、sort()排序
Java基础 String 算法 - 五个练习题目要求:
/** 1.模拟一个trim方法,去除字符串两端的空格。 2.将一个字符串进行反转。将字符串中指定部分进行反转。比如将“abcdefg”反转为”abfedcg” */ /** 3.获取一个字符串在另一个字符串中出现的次数。 比如:获取“ ab”在 “abkkcadkabkebfkabkskab”中出现的次数. 4.获取两个字符串中最大相同子串。比如: str1 = "abcwerthelloyuiodef“;str2 = "cvhellobnm" 提示:将短的那个串进行长度依次递减的子串与较长 的串比较。 5.对字符串中字符进行自然顺序排序。 提示: 1)字符串变成字符数组。 2)对数组排序,选择,冒泡,Arrays.sort(); 3)将排序后的数组变成字符串。 * */
算法代码:(全为裸的暴力代码,)
import java.lang.reflect.Array; import java.util.Arrays; public class Test_String { public static void main(String[] args) { //1. myTrim(" 12 123 234 ");myTrim("12 123 234 "); myTrim("12 123 234");myTrim(" "); //2. RevString("123456",1,4); RevString("123456",3,5); RevString("123456",5,5); //3. CountSubStr("ab","abkkcadkabkebfkabkskab"); CountSubStr("abkkcadkabkebfkabkskab","abkkbkebfkabkskab"); CountSubStr("abkkcadkabkebfkabkskab","abkkcadkabkebfkabkskab"); //4. CountLongestSubStr("abkkcadkabkebfkabkskab","abkkbkebfkabkskab"); CountLongestSubStr("4564698719","145764987134874364"); //5. SortStr("46541324asdvdsd"); SortStr("465asdAA41324asdvdsd"); } //1.模拟一个trim方法,去除字符串两端的空格。 public static void myTrim(String str){ int start=0,endd=str.length()-1; char[] s= str.toCharArray(); for(int i=0;i<endd;i++){ if(s[i]==' ') start++; else break; } for(int i=endd;i>=start;i--){ if(s[i]==' ')endd--; else break; } String s2=new String(s,start,endd-start+1); System.out.println("myTrim() :["+str+"] -->["+s2+"]"); } //2.将一个字符串进行反转。将字符串中指定下标的部分进行反转 public static void RevString(String str,int st,int ed){ char[] s= str.toCharArray(); int len=str.length(); if(st<0||ed>=len||st>ed){ System.out.println("Range Error!");return ; } for(int i=st,j=ed;i<j;i++,j--){ char temp=s[i]; s[i]=s[j]; s[j]=temp; } String ss=new String(s); System.out.println("RevString() "+str+"--指定下标反转-->"+ss); } //3.获取一个字符串s1在另一个字符串s2中出现的次数。 public static int CountSubStr(String str1,String str2) { char[] s1= str1.toCharArray();int len1=str1.length(); char[] s2= str2.toCharArray();int len2=str2.length(); //枚举母串的起点和终点的位置,进行裸匹配 int cnt=0; for(int i=0;i<s2.length;i++){ int j=i+len1-1; if(j>=len2){ break; } int flag=0; for(int k=i;flag==0 && k<=j;k++){ if(s1[k-i]!=s2[k]) flag=1; } if(flag==0){ cnt++; // System.out.println("****"+i+" "+j); } } System.out.println("CountSubStr() "+str1+" in "+str2+" counting "+cnt+" times!"); return cnt; } public static int CountSubStr2(String str1,String str2) { //为第四题做准备,只是删去了输出! char[] s1= str1.toCharArray();int len1=str1.length(); char[] s2= str2.toCharArray();int len2=str2.length(); //枚举母串的起点和终点的位置,进行裸匹配 int cnt=0; for(int i=0;i<s2.length;i++){ int j=i+len1-1; if(j>=len2){ break; } int flag=0; for(int k=i;flag==0 && k<=j;k++){ if(s1[k-i]!=s2[k]) flag=1; } if(flag==0){ cnt++; // System.out.println("****"+i+" "+j); } } return cnt; } //4.获取两个字符串中最大相同子串 public static void CountLongestSubStr(String sonstr,String str){ char[] s1= sonstr.toCharArray(); char[] s2= str.toCharArray(); int ans_len=0; ///解决思路:直接枚举子串的所有子串,然后一一跟母串进行匹配 String ansString=""; for(int i=0;i<s1.length;i++){ for(int j=i+1;j<s1.length;j++){ int num=CountSubStr2(new String(s1,i,j-i+1),str); if(num>0&&ans_len<(j-i+1)){ ans_len=j-i+1; ansString=new String(s1,i,j-i+1); } } } System.out.println("CountLongestSubStr() "+sonstr+" & "+str+" is ["+ansString+ "],len is "+ans_len); }
//5.字符串变成字符数组。2)对数组排序
public static void SortStr(String str){ char s[]=str.toCharArray(); Arrays.sort(s); System.out.println("SortStr() "+str+"-->"+ "["+new String(s)+"]" ); } }
输出结果:
myTrim() :[ 12 123 234 ] -->[12 123 234] myTrim() :[12 123 234 ] -->[12 123 234] myTrim() :[12 123 234] -->[12 123 234] myTrim() :[ ] -->[] RevString() 123456--指定下标反转-->154326 RevString() 123456--指定下标反转-->123654 RevString() 123456--指定下标反转-->123456 CountSubStr() ab in abkkcadkabkebfkabkskab counting 4 times! CountSubStr() abkkcadkabkebfkabkskab in abkkbkebfkabkskab counting 0 times! CountSubStr() abkkcadkabkebfkabkskab in abkkcadkabkebfkabkskab counting 1 times! CountLongestSubStr() abkkcadkabkebfkabkskab & abkkbkebfkabkskab is [bkebfkabkskab],len is 13 CountLongestSubStr() 4564698719 & 145764987134874364 is [9871],len is 4 SortStr() 46541324asdvdsd-->[12344456adddssv] SortStr() 465asdAA41324asdvdsd-->[12344456AAaaddddsssv]
测试结果正确不代表算法完全正确, 本文章仅供参考!