首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >“模拟”专项类型题

“模拟”专项类型题

作者头像
用户11305962
发布2024-11-21 16:45:20
发布2024-11-21 16:45:20
1170
举报
文章被收录于专栏:学习学习

题目: 

解析:从前往后遍历字符串,判断i位置前一个和后一个有没有和 “a” 到 “z” 相等,不相等就把问好替换; 注意特殊情况 “?” 在最前面和最后面。

代码:

代码语言:javascript
复制
 public String modifyString(String ss) {
        char[] s = ss.toCharArray();

        int n = s.length;
        for(int i = 0; i < n; i++){
            if(s[i] == '?'){
                for(char ch = 'a'; ch <= 'z'; ch++){
                    if((i == 0 || ch != s[i-1]) && (i == n-1 || ch != s[i+1])){
                        s[i] = ch;
                        break;
                    }
                }
            }
        }

        return String.valueOf(s);
    }

题目:


解析: 

 代码: 

代码语言:javascript
复制
 public int findPoisonedDuration(int[] timeSeries, int duration) {
        int ret = 0;
        for(int i = 1; i < timeSeries.length; i++){
            int x = timeSeries[i] - timeSeries[i-1];
            if(x < duration) ret += x;
            else ret += duration;
        }

        return ret+duration;
    }

 题目:  


解析:

方法一:用一个方向变量定义方向,方向变量向下行数+1; 方向变量向上行数-1 

代码:

代码语言:javascript
复制
public static String convert(String ss, int numRows) {
        if(numRows == 1){
            return ss;
        }

        char[] s = ss.toCharArray();

        String[] array = new String[numRows];
        Arrays.fill(array, "");//上面默认会赋值null,这里要赋值一下

        //方向变量向下行数+1; 方向变量向上行数-1
        boolean down = false;
        for(int i = 0,row = 0; i < s.length; i++){
            array[row] += s[i];

            //如果方向到第一行或者最后一行,要改变
            if(row == 0 || row == numRows-1){
                down = !down;
            }
            row += down ? 1 : -1;
        }

        StringBuilder stringBuilder = new StringBuilder();
        for(String x : array){
            stringBuilder.append(x);
        }

        return stringBuilder.toString();
    }

方法二: 

解析: 模拟类型的题优化就是找规律


代码: 

代码语言:javascript
复制
//方法二:
     public static String convert(String ss, int numRows) {
        if(numRows == 1) return ss;

        char[] s = ss.toCharArray();
        int d = 2 * numRows - 2;
        int n = s.length;

        StringBuilder ret = new StringBuilder();

        //1.处理第一行
        for(int i = 0; i < n; i+=d)
            ret.append(s[i]);

        //2.枚举处理中间行
        for(int k = 1; k < numRows-1; k++)
            for(int i = k, j = d-i; i < n || j < n; i += d,j += d){
                if(i < n) ret.append(s[i]);
                if(j < n) ret.append(s[j]);
            }

        //1.处理最后一行
        for(int i = numRows-1; i < n; i+=d)
            ret.append(s[i]);


        return ret.toString();          
    }

题目:


解析: 


代码: 

代码语言:javascript
复制
 public String countAndSay(int n) {
        
        String ret = "1";

            //描述,n-1次即可
        for(int i = 1; i < n; i++){
            StringBuilder tmp = new StringBuilder();

            //具体的描述
            int len = ret.length();
            for(int left = 0, right = 0; right < len; ){

                while(right < len && ret.charAt(right) == ret.charAt(left)) right++;

                tmp.append(Integer.toString(right-left));
                tmp.append(ret.charAt(left));
                left = right;
            }
            
            ret = tmp.toString();
        }

        return ret;
    }

题目:


解析: 


代码:

代码语言:javascript
复制
 public int minNumberOfFrogs(String c) {
        char[] croakOfFrogs = c.toCharArray();
        String t = "croak";
        int n = t.length();
        int[] hash = new int[n]; // 数组模拟哈希表


        //再new一个哈希表来绑定,某个元素和下标关系
        Map<Character,Integer> index = new HashMap<>();
        for(int i = 0; i < n; i++)
            index.put(t.charAt(i),i);


        for(char ch : croakOfFrogs){
            if(ch == t.charAt(0)){
                if(hash[n-1] != 0) hash[n-1]--;
                hash[0]++;
            }else{
                int i = index.get(ch);
                if(hash[i-1] == 0) return -1;
                hash[i-1]--; hash[i]++;
            }
        }

        for(int i = 0; i <= n-2; i++)
            if(hash[i] != 0)
                return -1;

        return hash[n-1];           
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-11-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档