字符相关算法(二)

将字符串中所有的*移动到左边

1.使用冒泡排序的方式,冒泡是稳定的,可以保证字符的顺序

public void removeLeftAndRight(char[] a)
    {
        for(int i=0;i<a.length;i++)
        {
            for (int j=a.length-1;j>i;j--)
            {
                if(a[j]=='*'){
                    char temp=a[j-1];
                    a[j-1]=a[j];
                    a[j]=temp;
                }
            }
        }
    }

2.从后往前扫描遇到字符就放到数组后面相应的位置,前面剩余的位置,补上*即可

 public void removeLeftAndRightn(char[] a)
    {
        int len=a.length;
        for(int i=len-1;i>=0;i--)
        {
            if(a[i]!='*')
            {
                a[--len]=a[i];
            }
        }
        for(int i=len-1;i>=0;i--)
        {
            a[i]='*';
        }
    }

统计字符出现的次数

利用数组,数组下标代表字母,如0代表A,依次类推。然后存储出现的次数

 public void countChar(char[] a)
    {
        int[] result=new int[52];
        for (int i=0;i<a.length;i++)
        {
            result[a[i]-'A']++;
        }
        for(int i=0;i<result.length;i++)
        {
            System.out.println((char) ('A'+i)+":"+result[i]);
        }
    }

压缩字符串中的空格,如果有两个空格则压缩成一个空格

利用两个指针,如果第一个指针遇到了空格,则判断第二指针是否是空格,直到第二个指针不为空格,则将前一个指针的值放到新数组里

 public String compressBlank(char[] a)
    {
        if(a==null)
        {
            return a.toString();
        }
        StringBuilder stringBuilder=new StringBuilder();
        for (int i=0;i<a.length;i++)
        {
            //a[i]是空格才进一步判断,否则直接放到新数组里
            if(a[i]==' ')
            {
                //碰到连续的空格,则继续
                if((i+1)<a.length&&a[i+1]==' ')
                {
                    continue;
                }else {
                    stringBuilder.append(a[i]);
                }

            }else {
                stringBuilder.append(a[i]);
            }
        }
        return stringBuilder.toString();


    }
点赞