• 字符串常见题目


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

        public String myTrim(String str){
            int start = 0;
            int end = str.length() - 1;
            while(start < end && str.charAt(start) == ' '){
                start++;
            }
            while(start < end && str.charAt(end) == ' '){
                end--;
            }
            if(start == end && str.charAt(start) == ' '){
                return "";
            }
            return str.substring(start, end + 1);
        }

    2.将一个字符串反转,将字符串中指定部分进行反转。比如“abcdefg”反转为“abfedcg”。

        public String myReverse(String str, int start, int end){
            char[] charArray = str.toCharArray();
            while (start < end){
                char temp = charArray[start];
                charArray[start] = charArray[end];
                charArray[end] = temp;
                start++;
                end--;
            }
            return new String(charArray);
        }

     Note:需要加上边界条件,"str != null" 

    3.获取一个字符串在另一个字符串中出现的次数。比如获取“ab”在“abskfjdlabajbalkjab”中出现的次数。

        // 三种方法
        public int myCount3(String str1, String str2){
            int count = 0;
            int index = 0;
            while (str2.indexOf(str1,index) != -1){
                count++;
                index = str2.indexOf(str1,index) + str1.length();
            }
    
            return count;
        }
        public int myCount2(String str1, String str2){
            int count = 0;
            while (str2.indexOf(str1) != -1){
                count++;
                str2 = str2.substring(str2.indexOf(str1) + str1.length());
            }
            return count;
        }
        public int myCount1(String str1, String str2){
            int count = 0;
            int index2 = 0;
            int len = str1.length();
            while (index2 < str2.length()){
                if (str2.charAt(index2) == str1.charAt(0)){
                    String temp = str2.substring(index2,index2+len);
                    if (temp.equals(str1)){
                        count++;
                        index2 += len;
                        continue;
                    }
                }
    
                index2++;
            }
            return count;
        }

    ☆☆4.获取两个字符串中最大相同字串,例s1="asdafghjka", s2="aaasdfg"    他们的最大子串为"asd"  。(假设最大字串只有一个,如果有多个用list添加)

    最优解思路:将短的那个串长度依次递减的字串与长串比较!

        public String mySubString(String str1,String str2){
            String longStr = str1.length() >= str2.length() ? str1 : str2;
            String shortStr = str1.length() < str2.length() ? str1 : str2;
            int len = shortStr.length();
            for (int i = 0; i < len; i++) {
                for (int x = 0,y=len-i; y <= len; x++,y++) {
                    String temp = shortStr.substring(x,y);
                    if (longStr.contains(temp)){ //str1.indexOf(temp) != -1
                        return temp;
                    }
                }
            }
            return null;
        }

     Note:需要加上边界条件,"str != null" 

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

    思路:转化为字符数组进行排序。

        public String mySort(String str){
            char[] charArray = str.toCharArray();
            Arrays.sort(charArray);
            return new String(charArray);
        }
  • 相关阅读:
    HDU3440 House Man (差分约束)
    POJ1201 Intervals (差分约束)
    POJ2154 Color【 polya定理+欧拉函数优化】(三个例题)
    【2018年全国多校算法寒假训练营练习比赛(第三场)】
    数据人看Feed流-架构实践
    开源背后 | 面对端侧推理引擎的挑战,阿里工程师如何应对?
    容器十年 ——一部软件交付编年史
    公网对讲行业大咖分享:铁通电子为何选择阿里云?
    逾期率飙升如何破?揭秘金融科技如何化解消费金融行业风险
    微服务开源生态报告 No.2
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/13934008.html
Copyright © 2020-2023  润新知