Java基础 String 裸暴力算法- 五个小练习

  之间的博客,承上启下:  

 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]

测试结果正确不代表算法完全正确, 本文章仅供参考!

原文地址:https://www.cnblogs.com/zhazhaacmer/p/9818109.html