1. 程式人生 > >Java基礎 String 裸暴力演算法- 五個小練習 Java陣列直接選擇排序、sort()排序

Java基礎 String 裸暴力演算法- 五個小練習 Java陣列直接選擇排序、sort()排序

  之間的部落格,承上啟下:  

 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]

測試結果正確不代表演算法完全正確, 本文章僅供參考!