剑指Offer28:常见的三个字符串问题

常见的三个字符串问题

问题1、从第一个字符串中删除在第二个字符串中出现的所有字符。

问题描述

定义一个函数,输入两个字符串,从第一个字符串中删除在第二个字符串中出现的所有字符。

public class Code028_05 {
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        String str1=sc.nextLine();
        String str2=sc.nextLine();
        removeSubString(str1,str2);
    }
    private static void removeSubString(String str1,String str2){
        if(str1.length()==0 || str2.length()==0){
            return;
        }
        ArrayList<Character> list=new ArrayList<>();
        for(int i=0;i<str1.length();i++){
            if(!(str2.contains(str1.charAt(i)+""))){
                list.add(str1.charAt(i));
            }
        }
        for(int k=0;k<list.size();k++){
            System.out.print(list.get(k)+"");
        }
    }
}

问题2、删除字符串中所有重复出现的字符

public class Code028_05 {
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        String str1=sc.nextLine();
        String str2=sc.nextLine();
        removeRepeat(str1);
    }
    private static void removeRepeat(String string){
        if(string.length()==0){
            return;
        }
//        Vector<Character> vector=new Vector<>();
//        for(int i=0;i<string.length();i++){
//            if(!vector.contains(string.charAt(i))){
//                vector.add(string.charAt(i));
//            }
//        }
//        for(int i=0;i<vector.size();i++){
//            System.out.print(vector.get(i)+"");
//        }
        HashMap<Integer,Character> map=new HashMap<>();
        for(int i=0;i<string.length();i++){
            if(!map.containsValue(string.charAt(i))){
                map.put(i,string.charAt(i));
            }
        }
//        for(char ch:map.values()){
//            System.out.print(ch+"");
//        }
        for(int key:map.keySet()){
            System.out.print(map.get(key)+"");
        }
    }
}

问题3、变位词问题

问题描述

在英语中,如果两个单词出现的字母相同,并且每个字母出现的次数也相同,那么两个单词护卫变位词。定义函数,是否互为变位词。输入两个字符串,判断是否互为变位词

public class Code028_05 {
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        String str1=sc.nextLine();
        String str2=sc.nextLine();
        boolean result=isVariant(str1,str2);
        System.out.print(result);
    }
    private static boolean isVariant(String str1,String str2){
        if(str1.length()==0 || str2.length()==0 ||str1.length()!=str2.length()){
            return false;
        }
        HashMap<Character,Integer> map=new HashMap<>();
        for(int i=0;i<str1.length();i++){
            if(map.containsKey(str1.charAt(i))){
                int value=map.get(str1.charAt(i));
                value+=1;
                map.put(str1.charAt(i),value);
            }else {
                map.put(str1.charAt(i),1);
            }
        }
        for(int i=0;i<str2.length();i++){
            if(map.containsKey(str2.charAt(i))){
                int value2=map.get(str2.charAt(i));
                value2-=1;
                map.put(str2.charAt(i),value2);
            }else {
                return false;
            }
        }
        for(int v:map.values()){
            if(v>0){
                return false;
            }
        }
        return true;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值