数据结构与算法学习笔记(一)之字符串

1.字符串统计(查找)

  • hash(利用ascall码生成hash)
  • 匹配(KMP算法)

习题1:

统计字符串中每个字符出现的次数。

package com.test;
/**
 * 统计字符串中每个字符出现的次数
 */
public class CountTheNum {

    public static int [] count(String s){
        char [] ss=s.toCharArray();//将字符串转为字符数组
        int [] aa=new int[256];
        for (char c:ss) {
            aa[c]++;//字符所在的数组元素个数加一
        }
      return aa;
    }

    public static void main(String[] args) {
        String s="nsjsiiaaa";
        int [] aa=count(s);
        for (int i=0;i<aa.length;i++){
            if(aa[i]>0){
                System.out.println((char)i+":"+aa[i]);
            }
        }
    }
}

习题2:

一个元素的移动:将字符串中指定元素移至指定位置

package com.test;
/**
 * 字符串移动
 * 一个元素的移动:将字符串中指定元素移至指定位置
 * 如 a b c d e o--->a c d e b o
 */
public class MoveOneWord {

    public static char [] afterMove(String s,int start,int end){
        char [] ss=s.toCharArray();
        char a=ss[start];//将要移动的元素先备份

        for (int i=start;i<end;i++){
            ss[i]=ss[i+1];
        }
        ss[end]=a;
        return ss;
    }

    public static void main(String[] args) {
        String s="abcde";
        String s2=new String(afterMove(s,1,3));
        System.out.println(s2);
    }
}

习题3:

将指定字符串移至最后:交换+反转

package com.test;
/**
 * 将指定字符串移至最后:交换+反转
 * a bcd ef   --->  a ef bcd
 */
public class MoveMoreWords {

    public static String moveString(String s,int start,int end){
        char[] aa=s.toCharArray();
        int i,j;
        char a;
        for (i=start,j=end;i<j;i++,j--){
            a=aa[i];
            aa[i]=aa[j];
            aa[j]=a;
        }

        return new String(aa);
    }
    public static String getString(String s,int start,int end){
        String ss;
        ss=moveString(s,start,s.length()-1);
        ss=moveString(ss,start,s.length()+start-end-2);
        ss=moveString(ss,s.length()+start-end-1,s.length()-1);
        return ss;
    }
    public static void main(String[] args) {
        String ss="abdefgh";
        ss=getString(ss,6,6);
        System.out.println(ss);
    }
}

习题4:

将字符串以空格(32)区分的每个单词,分别进行反转 * you are a good student--->student good a are you

package com.test;
/**
 * 将字符串以空格(32)区分的每个单词,分别进行反转
 * you are a good student--->student good a are you
 */
public class WordsConvert {

    public static String MoveWords(String s,int start,int end){
        char [] aa=s.toCharArray();
        int i,j;
        char c;
        for (i=start,j=end;i<j;i++,j--){
            c=aa[i];
            aa[i]=aa[j];
            aa[j]=c;
        }

        return new String(aa);
    }

     public static String convertWords(String s){
          int start=0;
          //先将字符串整体进行反转
          s=MoveWords(s,0,s.length()-1);
          char [] aa=s.toCharArray();

             for(int j=0;j<s.length();j++){
                 //出现空格时,对单个单词进行反转
                 if (aa[j]==32){
                     s=MoveWords(s,start,j-1);
                     start=j+1;
                 }
                 //对最后一个单词进行反转
                 if(j==s.length()-1){
                     s=MoveWords(s,start,s.length()-1);
                 }
             }
         return s;
     }
    public static void main(String[] args) {
        String ss="you are a good student";
        ss=convertWords(ss);
        System.out.println(ss);
    }
}

习题5:

将语句中的空格用20%替换 * you are a good student--->you 20%are20%a20%student

package com.test;

/**
 * 将语句中的空格用20%替换
 * you are a good student---》》you 20%are20%a20%student
 */
public class ReplaceBlank {
      public static String replace(String s){
        char[] c1=s.toCharArray();
        int cnt=0;
        for(int i=0;i<s.length();i++){
            if(c1[i]==32){
                cnt++;
            }
        }
        char[] c2=new char[s.length()+cnt*2];
        int index=0;
        for(int i=0;i<s.length();i++){
            //空格替换成20%
            if(c1[i]==32){
                c2[index]='2';
                index++;
                c2[index]='0';
                index++;
                c2[index]='%';
                index++;
            }else{
                c2[index]=c1[i];
                index++;
            }
        }
        return new String(c2);
    }

    public static void main(String[] args) {
        String s="you are a good student";
        s=replace(s);
        System.out.println(s);
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值