编程题_字符串

1.空格替换

1.1题目详述

题目链接:空格替换

1.2思路解析

遍历iniString,将空格全部替换成 %20

1.3程序测试

class Replacement {
        public String replaceSpace1(String iniString, int length) {
            if (iniString == null || iniString.length() <= 0) {
                return iniString;
            }

            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < length; i++) {
                char c = iniString.charAt(i);
                if (c == ' ') {
                    sb.append("%20");
                } else{
                    sb.append(c);
                }
            }
            return sb.toString();
        }
    }
}

2.删除公共字符

2.1题目详述

题目链接:删除公共字符

2.2思路解析

遍历第一个字符串,判断每个字符在第二个字符串中是否包含。
注意:删除时注意下标变化。

2.3程序测试

import java.util.Scanner;

public class Main{
    public static String text(String s1 ,String s2){
        StringBuilder stringBuilder = new StringBuilder(s1);
        if(s1.length() == 0 || s2.length() == 0){
            return s1;
        }

        int num = 0;
        for(int i = 0; i < s1.length(); i++){ //遍历字符串1
            String s = String.valueOf(s1.charAt(i));
            System.out.println(i + ":" + s);
            if(s2.contains(s)){
                int index = i-num; //计算当前要删除字符下标
                stringBuilder.deleteCharAt(index);
                num ++;
            }
        }
        return stringBuilder.toString();
    }
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String s1 = sc.nextLine();
        String s2 = sc.nextLine();
        System.out.println(text(s1,s2));
    }
}

3.回文串:添加一个字母将其变为回文串

3.1题目详述

题目链接:回文串

3.2思路解析

添加一个字母将其变为回文串 ==》 减少任意一个字母如果可以构成回文串,那么它必定可以通过添加一个字母变成回文串。

3.3程序测试

import java.util.Scanner;

public class Main{
    public static String myReserve(String s){
        StringBuilder stringBuilder = new StringBuilder(s);
        //System.out.println(stringBuilder); //注意:自身旋转 旋转之后值改变
        if(stringBuilder.length() == 0 || stringBuilder.reverse().toString().equals(s)){
            return "YES";
        }else{
          for(int i = 0;i<stringBuilder.length();i++){
              StringBuilder str = new StringBuilder(s).deleteCharAt(i);
              String s1 = str.toString(); //记录原串
              if(str.reverse().toString().equals(s1)){
                  return "YES";
              }
          }
        }
        return "NO";
    }
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String s = sc.next();
            String result = myReserve(s);
            System.out.println(result);
        }
    }
}

4.句子反转

4.1题目链接

4.2思路一

按空格分割,将 String[] 逆序遍历拼接。
注意:结果串的最后一个单词不用加空格。

import java.util.Scanner;

public class Main{
    public static String reverse(String s){
        if(s.length()== 0 || !s.contains(" ")){
            return s;
        }
        String[] word = s.split(" ");
        StringBuilder stringBuilder = new StringBuilder("");
        for(int i = word.length-1; i >=0; i --){
            if(i == 0){
                stringBuilder.append(word[i]);
            }else{
                stringBuilder.append(word[i]).append(" ");
            }
        }
        return stringBuilder.toString();
    }
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        System.out.println(reverse(s));
    }
}

4.3思路二

先反转整体,再反转部分。
在这里插入图片描述

public class Main {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        while (cin.hasNextLine()) {
            String str = cin.nextLine();
            System.out.println(reverseSentence(str));
        }
    }
    
    //逆置函数
    public static void reverse(char[] ch,int start,int end) {
        while(start < end) {
            char tmp=ch[start];
            ch[start]=ch[end];
            ch[end]=tmp;
            start++;
            end--;
        }
    }

    //核心代码
    public static String reverseSentence(String str) {
        if(str == null) {
            return null;
        }
        char[] ch = str.toCharArray();
        //先对整体进行逆置
        reverse(ch,0,str.length()-1);
        int i = 0;
        int j = 0;
        //开始部分逆置,建议对着代码进行画图理解
        while(i < ch.length) {
            //都是空格,都进行++
            if(ch[i] == ' ') {
                i++;
                j++;
            }else if(j == ch.length || ch[j] == ' ' ) {//顺序不能反,否则会空指针异常
                //逆置每个单词,这里是--j,j本身会发生移动
                reverse(ch,i,--j);
                i = ++j;
            }else {
                ++j;
            }
        }
        return String.copyValueOf(ch);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值