首页 > 试题广场 >

查找

[编程题]查找
  • 热度指数:14987 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
    读入一组字符串(待操作的),再读入一个int n记录记下来有几条命令,总共有2中命令:1、翻转  从下标为i的字符开始到i+len-1之间的字符串倒序;2、替换  命中如果第一位为1,用命令的第四位开始到最后的字符串替换原读入的字符串下标 i 到 i+len-1的字符串。每次执行一条命令后新的字符串代替旧的字符串(即下一条命令在作用在得到的新字符串上)。     命令格式:第一位0代表翻转,1代表替换;第二位代表待操作的字符串的起始下标int i;第三位表示需要操作的字符串长度int len。

输入描述:
输入有多组数据。
每组输入一个字符串(不大于100)然后输入n,再输入n条指令(指令一定有效)。


输出描述:
根据指令对字符串操作后输出结果。
示例1

输入

bac
2
003
112as

输出

cab
cas
Java  按照题目说着做
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            String s = scanner.next();
            int n = scanner.nextInt();
            for (int i = 0; i < n; i++) {
                String instruction = scanner.next();
                char[] array = instruction.toCharArray();
                int start =array[1] - '0';
                int len = array[2] - '0';
                if (array[0]=='1'){
                    String replace = instruction.substring(3);
                    String ss=s.substring(0,start)+replace+s.substring(start+len);
                    s=ss;
                    System.out.println(ss);

                }else {
                    String replace = new StringBuilder(s.substring(start,start+len)).reverse().toString();
                    String ss=s.substring(0,start)+replace+s.substring(start+len);
                    s=ss;
                    System.out.println(ss);
                }
            }
        }



    }
}


发表于 2020-03-19 19:28:37 回复(0)
import java.util.Scanner;

public class Test{
    public static void main(String[] args)  {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String str = scanner.next();
            int n = scanner.nextInt();
            for(int i = 0; i < n; i++) {
                String com = scanner.next();
                if(com.charAt(0) == '0') {
                    str = retravel(str, com, (int)(com.charAt(1) - '0'), (int)(com.charAt(2) - '0'));
                }else if(com.charAt(0) == '1') {
                    str = replace(str, com, (int)(com.charAt(1) - '0'), (int)(com.charAt(2) - '0'));
                }
            }
        }
    }

    private static String replace(String str, String com, int i, int j) {
        String newStr1 = str.substring(0, i);
        String newStr2 = com.substring(3, com.length());
        String newStr3 = "";
        if((i + j) <= str.length() - 1) newStr3 = str.substring((i + j), str.length() );
        str = newStr1 + newStr2 + newStr3;
        System.out.println(str);
        return str;
    }

    private static String retravel(String str, String com, int i, int j) {
        StringBuffer newStr = new StringBuffer();
        if(i > 0) newStr.append(str.substring(0, i));
        for(int k = (i + j - 1); k >= i; k--) {
            newStr.append(str.charAt(k));
        }
        if((i + j) < str.length()) newStr.append(str.substring((i + j), str.length()));
        str = String.valueOf(newStr);
        System.out.println(str);
        return str;
    }
}
发表于 2020-03-07 12:19:09 回复(0)
import java.util.*;

//一直以为两条指令分别对字符串操作,后来才意识到是对同一个字符串连续操作,
//搞了好半天,服了我自己了。
public class Main{
    private static String flip(int beg,int len,String str){
        StringBuffer sb = new StringBuffer();
        int i;
        //wrrxegykjtrunuwxalgcbxistydvrxmfyhb
        //wrrxegykj  unuwxalgcbxistydvrxmfyhb
        
        for(i = 0;i<beg;i++) {
            sb.append(str.charAt(i));
        }
        for(i = beg+len-1;i>=beg;i--){
            sb.append(str.charAt(i));
        }
        for(i = len+beg;i<str.length();i++) {
            sb.append(str.charAt(i));
        }
        return sb.toString();
    }
    private static String replace(String str,int beg,int len,String rep){
        StringBuffer sb = new StringBuffer();
        int j;
        
        for(j = 0;j<beg;j++){
            sb.append(str.charAt(j));
        }
        sb.append(rep);
        for(j = beg+len;j<str.length();j++){
            sb.append(str.charAt(j));
        }
        
        return sb.toString();
    }
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        String nn = scanner.nextLine();
        int n = Integer.parseInt(nn);
        
        
        String[] command = new String[n];
        for(int i = 0;i<n;i++){
            command[i] = scanner.nextLine();
        }
        
        int i;
        for(i = 0;i<n-1;i++){
            if(command[i].charAt(0)=='0'){
                str = flip(command[i].charAt(1)-'0',command[i].charAt(2)-'0',str);
                System.out.println(str);
            }else{
                str = replace(str,command[i].charAt(1)-'0',command[i].charAt(2)-'0',command[i].substring(3));
                System.out.println(str);
            }
        }
        if(command[i].charAt(0)=='0'){
            str = flip(command[i].charAt(1)-'0',command[i].charAt(2)-'0',str);
            System.out.println(str);
        }else{
            str = replace(str,command[i].charAt(1)-'0',command[i].charAt(2)-'0',command[i].substring(3));
            System.out.println(str);
        }

        scanner.close();
    }
}

发表于 2018-12-27 21:22:01 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
            StringBuilder str = new StringBuilder(scan.nextLine());
            int n = scan.nextInt();
            scan.nextLine();
            for (int i = 0; i < n; i++) {
                String order = scan.nextLine();
                int type = order.charAt(0) - 48;
                int begin = order.charAt(1) - 48;
                int len = order.charAt(2) - 48;
                if (type == 0) {
                    StringBuilder a = new StringBuilder(str.substring(begin,begin+len));
                    a.reverse();
                    str = new StringBuilder(str.substring(0,begin)).append(a).append(str.substring(begin+len,str.length()));
                } else if (type == 1) {
                    str = str.replace(begin,begin+len,order.substring(3,order.length()));
                }
                System.out.println(str);
            }
        }
    }
}

发表于 2018-03-01 18:37:14 回复(0)
import java.util.Scanner;
public class Main{
    public void problem9(){
        Scanner input = new Scanner(System.in);
        String strData = input.next();
        int N = input.nextInt();
        String order = null;
        int firstBit,startBit,lenBit;
        // 主循环
        for(int i = 0 ;i < N ;i++){
            order = input.next();
            firstBit = Integer.valueOf(order.substring(0, 1));
            startBit = Integer.valueOf(order.substring(1, 2));
            lenBit = Integer.valueOf(order.substring(2, 3));
            if(firstBit == 0){
                String temp = strData.substring(startBit, lenBit+startBit);
                char[] mainChars = strData.toCharArray();
                char[] subChars = temp.toCharArray();
                for(int j = subChars.length-1 , index = startBit;j >= 0 ;j--,index++){
                    mainChars[index] = subChars[j];
                }
                strData = String.valueOf(mainChars);
                System.out.println(strData);
            }else if(firstBit == 1) {
                String midStr = order.substring(3);
                String firstStr = strData.substring(0,startBit);
                String endStr = strData.substring(startBit+lenBit);
                strData = firstStr+midStr+endStr;
                System.out.println(strData);
            }
        }
        
    }
        public static void main(String[] args) {
        new Main().problem9();
    }
}
java版本的解法
其中substring(a, b)方法求的是[a,b-1]子串
编辑于 2018-02-07 20:54:09 回复(0)