字符串算法题二

字符串算法题二

import java.lang.String;
import org.junit.Test;

public class Demo {
    /*
     * 1.模拟一个trim方法,去除字符串两端的空格
     * 思路:
     * ①判断第一个字符是否为空格,如果是继续向下判断,直到不是空格为止。结尾处判断空格也是如此
     * ②当开始和结尾都判断的不是空格时,就是要获取的字符串
     */
    @Test
    public void test1() {
        String str = " a b c ";
        char[] chars = str.toCharArray();
        int start = 0;
        int end = chars.length - 1;
        for (int i = 0; i < end; i++) {
            if (chars[start] == ' ') {
                start++;
            }
            if (chars[end] == ' ') {
                end--;
            }
        }
        System.out.println(str.substring(start, end + 1));
    }

    @Test
    /*
     * 将一个字符串进行反转,将字符串中直到部分进行反转。比如"abcdefg"反转为"abfedcg"
     */
    public void test2() {
        String str = "abcdefg";
        int beginIndex = 2;
        int endIndex = 5;
        char[] chars = str.toCharArray();
        for (int i = beginIndex, j = endIndex; i < j; i++, j--) {
            char temp = chars[i];
            chars[i] = chars[j];
            chars[j] = temp;
        }
        System.out.println(new String(chars));
    }

    @Test
    /*
        获取一个字符串在另一个字符串中出现的次数
        比如:获取"ab"在"abkkcadkabkebfkabkskab"中出现的次数
     */
    public void test3() {
        String str = "abkkcadkabkebfkabkskab";
        char[] chars = str.toCharArray();
        int count = 0;
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] == 'a' && chars[i + 1] == 'b') {
                count++;
            }
        }
        System.out.println(count);
    }

    @Test
    /*
        获取两个字符串中最大相同子串。比如:
        str1 = "abcwerthelloyuiodef"
        str2 = "cvhellobnm"
        提示:将短的那个串进行长度依次递减的子串与较长的串比较
     */
    public void test4(){
        System.out.println("见下面的Demo1");
    }

    @Test
    /*
        对字符串中字符进行自然顺序排序
        提示:
        1、字符串变成字符数组
        2、对数组排序,选择,冒泡,Arrays.sort()
        3、将排序后的数组变成字符串
     */
    public void test5(){
        String str = "dagdavxfsa";
        char[] chars = str.toCharArray();
        System.out.println(chars);
        System.out.println(new String(chars));
    }
}

/*
  获取两个字符串中最大相同子串。比如:
  str1 = "abcwerthelloyuiodef"
  str2 = "cvhellobnm"
  提示:将短的那个串进行长度依次递减的子串与较长的串比较
*/
public class Demo1 {
    public static void main(String[] args) {
        String s1 = "abcwerthelloyuiodef";
        String s2 = "cvhellobnm";
        String newS = getlongsub(s1, s2);
        String[] newS1 = getlongsub1(s1, s2);
        System.out.println(newS);
        System.out.println(Arrays.toString(newS1));
    }

    //长度一样的最大相同子串只有一个
    public static String getlongsub(String str1, String str2) {
        if (str1 != null && str2 != null) {//判断传入的参数不为空
            String maxstr = (str1.length() >= str2.length()) ? str1 : str2;//比较两个字符串的长度获取较长的字符串
            String minstr = (str1.length() < str2.length()) ? str1 : str2;//比较两个字符串的长度获取较短的字符串
            for (int i = 0; i < minstr.length(); i++) {//遍历较短的字符串
                for (int t = 0, j = minstr.length() - i; j <= minstr.length(); t++, j++) {
                    if (maxstr.contains(minstr.substring(t, j))) {
                        return minstr.substring(t, j);
                    }
                }
            }
        }
        return null;
    }

    //长度一样的最大相同子串有多个
    public static String[] getlongsub1(String str1, String str2) {
        if (str1 != null && str2 != null) {
            StringBuffer sbuffer = new StringBuffer();
            String maxstr = (str1.length() >= str2.length()) ? str1 : str2;
            String minstr = (str1.length() < str2.length()) ? str1 : str2;
            for (int i = 0; i < minstr.length(); i++) {
                for (int t = 0, j = minstr.length() - i; j <= minstr.length(); t++, j++) {
                    if (maxstr.contains(minstr.substring(t, j))) {
                        sbuffer.append(minstr.substring(t, j) + ",");
                    }
                }
                if (sbuffer.length() != 0) {
                    break;
                }
            }
            String[] str = sbuffer.toString().replaceAll(",$", "").split(",");
            return str;
        }
        return null;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值