string常见的算法题

最近在整理string的常用方法,用几道题来加深一下印象:

1.指定位置字符串反转

方式一: 通过char[]数组实现

public static String reverse1(String str,int start,int end){
        if(str != null){
            char[] ch = str.toCharArray();
            for(int i = start,j = end;i < j;i++,j--){
                char temp = ch[i];
                ch[i] = ch[j];
                ch[j] = temp;
            }
            return new String(ch);
        }
        return null;
    }

方式二: 通过字符串拼接,由于字符串是不可变的,每次拼接都会创建新的字符串

public static String reverse2(String str,int start,int end){
        if(str != null){
            //拼接未指定的前部分
            String s = str.substring(0,start);//左闭右开
            for(int i = end;i >= start;i--){//从后往前取值
                s += str.charAt(i);
            }
            //拼接未指定的后部分
            s += str.substring(end + 1);
            return s;
        }
        return null;
    }

方式三: 通过stringBuilderstringBuffer

public static String reverse3(String str,int start,int end){
        if(str != null){
            StringBuilder sb = new StringBuilder(str.length());
            sb.append(str.substring(0,start));
            for(int i = end;i >= start;i--){//从后往前取值
                sb.append(str.charAt(i));
            }
            sb.append(str.substring(end+1));
            return sb.toString();
        }
        return null;
    }

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

public static int countOfSubStr(String mainStr,String subStr){
        int mainLen = mainStr.length();
        int subLen = subStr.length();
        int index = 0;
        int count = 0;
        if(mainLen >= subLen){
            /*方式一:
            while ((index = mainStr.indexOf(subStr)) != -1){/首先获取下标
                count++;
                mainStr = mainStr.substring(index + subStr.length());//根据下标截取字符串
            }*/

            //方式二
            while ((index = mainStr.indexOf(subStr,index)) != -1){//首先获取下标,每次获取指定的字符串都会更新index
                count++;
                index += subLen;
            }

        }
        return count;

    }

3.获取两个字符串的相同最大字串

public static String maxSubLenOfTwoString(String str1,String str2){
        if(str1 == null || str2 == null){
            return null;
        }
        int maxLen = str1.length() >= str2.length() ? str1.length() : str2.length();
        int minLen = str1.length() < str2.length() ? str1.length() : str2.length();
        int len = minLen;
        for(int i = 0;i < len;i++){
            for(int m = 0,n = len - i;n <= len;m++,n++){
                String str = str2.substring(m,n);
                if(str1.contains(str)){
                    return str;
                }
            }
        }
        return null;
    }

发布了39 篇原创文章 · 获赞 11 · 访问量 4714

猜你喜欢

转载自blog.csdn.net/Alphr/article/details/105341274
今日推荐