zoukankan      html  css  js  c++  java
  • 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]

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

  • 相关阅读:
    如何实现一个串行promise
    单机,分布式和集群的区别
    ERP & CRM
    CDN working principle diagram
    公众平台服务号、订阅号、企业号的相关说明
    DMZ的原理与应用
    ICP备案接入商
    DMZ主机
    浅析localstorage、sessionstorage
    Repeater+AspNetPager+Ajax留言板
  • 原文地址:https://www.cnblogs.com/zhazhaacmer/p/9818109.html
Copyright © 2011-2022 走看看