字符相关算法

字符串全组合

使用位图0代表该字符不出现,1代表该字符出现

public void Combinatin(char[] a)
    {
        int len=a.length;
        int n=0;
        if(len<32)
        {
            n=1<<len;
        }
        for(int i=0;i<n;i++){
            StringBuilder stringBuilder=new StringBuilder();
            for(int j=0;j<len;j++)
            {
                if((i&(1<<j))!=0)
                {
                    stringBuilder.append(a[j]);
                }
            }
            System.out.println(stringBuilder.toString());
        }
    }

整数二进制表示形式中含有1的个数

利用n&(n-1)将右边第一个1变成0来做

public int count1bit(int n)
    {
        int count=0;
        while (n!=0)
        {
            n&=(n-1);
            count++;
        }
        return count;

    }

字符转整型

//从低位开始遍历
public int charToInt(char[] a)
    {
        int result=0;
        for(int i=a.length-1;i>=0;i--)
        {
            int c=a[i]-'0';
            result= (int) (result+c*Math.pow(10,(a.length-i-1)));

        }
        return result;
    }
    //从高位开始遍历
    public int charToInt1(char[] a)
    {
        int result=0;
        for (int i=0;i<a.length-1;i++)
        {
            int c=a[i]-'0';
            result=result*10+c;
        }
        return result;
    }

判断是否是回文串

//思想是用两个指针从头和尾扫描进行判断
public boolean isPalindrome(char[] a)
    {
        int pre=0;
        int tail=a.length-1;
        while (pre<tail)
        {
            if(a[pre]!=a[tail])
            {
                return false;
            }
            pre++;
            tail--;
        }
        return true;
    }
点赞