面试题01[01,02,03]

面试题 01.01. 判定字符是否唯一

题目

在这里插入图片描述

代码

class Solution {
    public boolean isUnique(String astr) {
        // 使用set去重,之后返回size与string中的长度进行比较
        // Set<Character> set=new HashSet<>();
        // for(int i=0;i<astr.length();i++){
        //     set.add(astr.charAt(i));
        // }
        // return set.size()==astr.length();
    }
}
# class Solution:
#     def isUnique(self, astr: str) -> bool:
        # 使用set去重
        # s=set(astr)
        # return len(s)==len(astr)
        使用位运算(因为对于字符串可以用26个二进制数字表示,类似one—hot值)
        mask=0
        for s in astr:
            # move为当前字符与a之间的距离,之后再左平移一位就可以当成26中的该字符位置
            move=ord(s)-ord('a')
            # 对于未出现过的字符s与mask做&运算结果为0,因为mask中代表该字符的位置处为0
            if mask & (1<<move)==0:
                # 对于未出现的字符,对其做|或运算,将代表该位置的数字改为1
                mask|=(1<<move)
            else:
                return False
        return True

面试题 01.02. 判定是否互为字符重排

题目

在这里插入图片描述

代码

class Solution {
    public boolean CheckPermutation(String s1, String s2) {
        // 注意因为字符的ascII码最大为z的122,所以128维度数组可以按ascII码存所有的字符
        // 使用一个128维度的数组计数值,遍历第一个字符串,出现某个字符按其ascII码加一操作,同时对于第二个数组按其字符ascII码值进行减一操作
        // 最后遍历128维度的数组,如果均为0则返回True,否则返回false
        int i=s1.length(),j=s2.length();
        if(i!=j) return false;
        int[] arr=new int[128];
        for(int a=0;a<i;a++){
            arr[s1.charAt(a)]++;
            arr[s2.charAt(a)]--;
        }
        for(int k=0;k<128;k++){
            if(arr[k]!=0)
                return false;
        }
        return true;
    }
}
class Solution:
    def CheckPermutation(self, s1: str, s2: str) -> bool:
        # 1.使用排序后比较
        # return sorted(s1)==sorted(s2)
        # 2.使用两个哈希表存储
        i,j=len(s1),len(s2)
        if i!=j: return False
        mp={}
        for k in s1:
            if k in mp:
                mp[k]=mp[k]+1
            else:
                mp[k]=1
        for a in s2:
            if a in mp:
                mp[a]=mp[a]-1
            else:
                mp[a]=-1
        for l in mp.values():
            if l!=0:return False
        return True 

面试题 01.03. URL化

题目

在这里插入图片描述

代码


class Solution {
    public String replaceSpaces(String S, int length) {
        char[] s = S.toCharArray();
        int j =  S.length() - 1; 
        for (int i=length-1; i>=0; i--) {
            if (s[i] == ' ') {
                s[j--] = '0';
                s[j--] = '2';
                s[j--] = '%';
            }
        }
        return String.valueOf(s, j+1, S.length()-j-1);
    }
}
class Solution:
    def replaceSpaces(self, S: str, length: int) -> str:
        return S[:length].replace(" ","%20")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值