Java基礎 String 裸暴力演算法- 五個小練習 Java陣列直接選擇排序、sort()排序
阿新 • • 發佈:2018-11-10
之間的部落格,承上啟下:
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]
測試結果正確不代表演算法完全正確, 本文章僅供參考!