java基础之string算法,五个练习题目

KLQ 2020-08-12 14:41:09 java常见问答 3236

下面要给大家带来的就是和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() 46541324 asdvdsd-- > [12344456 adddssv]
SortStr() 465 asdAA41324asdvdsd-- > [12344456 AAaaddddsssv]

更多java基础知识,欢迎大家继续的关注奇Q工具网来进行了解哦,以上内容源于网络,仅供参考,希望可以对大家有所帮助。

推荐阅读:

java二叉树算法,二叉树常用算法实现详解

GC算法,gc算法有哪些?

hash算法有哪几种?几种经典的hash算法