String算法题

92 阅读1分钟

1.模拟一个trim方法,去除字符串两端的空格

public static void main(String[] args) {
        String s1 = " aa  bb cc ";
        System.out.println(myTrim(s1));
    }
    public static String myTrim(String s) {
        if (s == "") {
            return s;
        }
        char[] chars = s.toCharArray();
        int startIndex = 0;
        int endIndex = 0;
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] == ' '){
                startIndex = i;
                break;
            }
        }
        for (int i = chars.length-1; i > 0 ; i--) {
            if (chars[i] == ' ') {
                endIndex = i;
                break;
            }
        }
        return s.substring(startIndex,endIndex);
    }

2.将一个字符串进行反转。将字符串中指定部分进行反转

比如“abcdefg”反转为”abfedcg”

public static String myreverse(String str,int start,int end) {
    String startStr = str.substring(0,start);
    String midStr = str.substring(start,end);
    String endStr = str.substring(end);

    char[] chars = midStr.toCharArray();
    String midStrReverse = "";

    for (int i= chars.length-1;i>=0;i--) {
        midStrReverse += chars[i];
    }


    return startStr+midStrReverse+endStr;
}

3.获取一个字符串在另一个字符串中出现的次数

比如:获取“ab”在“abkkcadkabkebfkabkskab”中出现的次数

public static int myTime(String string,String str) {
    StringBuilder sb = new StringBuilder(string);

    int length = str.length();
    int time = 0;
    while (sb.length() > 0) {
        int i = sb.indexOf(str);
        if (i >= 0) {
            time++; //加1
            sb = new StringBuilder(sb.substring(i+length));
        }else {
            break;
        }
    }
    return time;
 }

4. 获取两个字符串中最大相同子串。

比如:str1 ="abcwerthelloyuiodef“;str2="cvhellobnm"

public static String getMaxSameString(String str1, String str2) {
        if (str1 != null && str2 != null) {
            String maxStr = (str1.length() >= str2.length()) ? str1 : str2;
            //(这里不能加=号,如果两个串的长度相等maxStr返回的就是str1,minStr返回的也是str1)
            String minStr = (str1.length() < str2.length()) ? str1 : str2;
            int length = minStr.length();
//           abcwerthelloyuiodefabcdef ---->cvhellobnm

            for (int i = 0; i < length; i++) {
                System.out.println(i);

                for (int x = 0, y = length - i; y <= length; x++, y++) {
                    String subString = minStr.substring(x, y);//不包含y
                    if (maxStr.contains(subString)) {
                        return subString;
                    }
                }
            }
        }
        return null;

    }

5.对字符串中字符进行自然顺序排序。

提示:

1)字符串变成字符数组。

2)对数组排序,选择,冒泡,Arrays.sort();

3)将排序后的数组变成字符串

  • Arrays.sort(char [])

1.png

  • 冒泡排序
String s = "abcdefkjdshfkajlds";
char[] chars = s.toCharArray();

for (int i = 0; i < chars.length -1; i++) {
    
    for (int j = 0; j < chars.length - i - 1; j++) {
        if (chars[j] > chars[j+1] ) {
            char temp = chars[j];
            chars[j] = chars[j+1];
            chars[j+1] = temp;
        }
    }
}
System.out.println(String.valueOf(chars));

2.png