算法练习(十)String类

一、单词倒序

1、题目描述: 输入单行英文句子,里面包含英文字母,空格以及,.? 三种标点符号,请将句子内每个单词进行倒序,并输出倒序后的语句

2、示例如下:
在这里插入图片描述

3、代码如下:

import java.util.*;

public class danCiDaoXu {
    //方法一:倒序输出
    //public static void main(String[] args) {
    //    Scanner sc=new Scanner(System.in);
    //    boolean isChar=false;
    //    while (sc.hasNext()){
    //        String str=sc.next();
    //        for(int i=str.length()-1;i>=0;i--){
    //            if(str.substring(i).equals(".")||str.substring(i).equals(",")){
    //                isChar=true;
    //                continue;
    //            }
    //            System.out.print(str.substring(i,i+1));
    //        }
    //        if(isChar==true){
    //            System.out.print(str.substring(str.length()-1));
    //            isChar=false;
    //        }
    //        System.out.print(" ");
    //    }
    //}

    //方法二:翻转输出
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while (sc.hasNext()){
            String str=sc.next();
            String rev=new StringBuffer(str).reverse().toString();
            String ans="";
            if(rev.substring(0,1).matches("[,.?]")){    //正则表达式
                ans=rev.substring(1)+rev.substring(0,1);
            }else {
                ans=rev;
            }
            System.out.print(ans+" ");
        }
    }
}

二、分界线

1、题目描述: 电视剧《分界线》里面有一个片段,男主为了向警察透露案件细节,且不暴露自己,于是将报刊上的字剪切下来,剪拼成匿名信。
现在有一名举报人,希望借鉴这种手段,使用英文报刊完成举报操作。
但为了增加文章的混淆度,只需满足每个单词中字母数量一致即可,不关注每个字母的顺序。
解释:单词’on’允许通过单词’no’进行替代
报纸代表newspaper, 匿名信代表anonymousLetter, 求报纸内容是否可以拼成匿名信。

2、示例如下:
在这里插入图片描述

3、代码如下:

import java.util.*;

public class fenJieXian {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String[] newspaper=sc.nextLine().split(" ");    //切割字符串数组
        String[] anonymousLetter=sc.nextLine().split(" ");
        boolean res=true;
        for (String anony:anonymousLetter){
            for (int i=0;i<newspaper.length;i++){
                String news=newspaper[i];
                if(anony.length()==news.length()&&handle(news,anony)){   //长度相等是防止越界
                    newspaper[i]=" ";   //匹配过的就不用再匹配了
                    break;
                }
                if(i==newspaper.length-1){  //如过到最后一个了还没匹配成功,视为失败
                    res=false;
                }
            }
            if(!res){               //一旦发现有匹配不成功的,直接false
                break;
            }
        }
        System.out.println(res);
    }

    public static boolean handle(String news,String anony){
        char[] newsChar=news.toCharArray();
        char[] anonyChar=anony.toCharArray();
        Arrays.sort(newsChar);
        Arrays.sort(anonyChar);
        boolean isTrue=true;
        for(int i=0;i<newsChar.length;i++){ //和每一个字符串都尝试匹配
            if(newsChar[i]!=anonyChar[i]){  //只要有一个不匹配,就输出false
                isTrue=false;
            }
        }
        return isTrue;
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值