算法练习——(10)小明的作业详解与分析(栈,数组,遍历,逻辑练习)

简介: 题目分析动手解题

题目分析


小明同学正在学习一种新的语言。在该语言中,如果出现了一次wa或者一次aw,则代表出现了一个警告。如果出现了连续的wa或者连续的aw,则代表出现了一个错误。小明由于学习比较粗心,所以他想要知道自己刚刚写完的作业中一共出现了多少处警告和错误。下面是小明刚刚写完的作业,请你帮助小明找到他一共出现了多少次警告和多少次错误。


分析题目:仔细读题,明确要求的是两个量,一个是警告,一个是错误。

大致思路:

1.定义两个变量分别为警告次数和错误次数

2.遍历作业经判断确定是警告次数增加还是错误次数增加


动手解题


祖传开头

public  class  Main  {  }


将题目所给大量文本内容复制出来,查看数据所有内容,并赋值给字符串s


static  String  s  =  “iawaswapwa…….eyiwe”;

新建一个新的空栈

Public static void main(String[] args){
Stack<Character> stk = new Stack<Character>() ;


创建两个变量

int ansl=0,ans2=0;


写一个for循环遍历每一个数,准备开始干大事


for (int i = 0; i < s.length(); i++) {… }

判断内容仅为w和a的组合,在栈为空时,无关元素直接忽略

仅当遍历到a或w时,push入栈


 if ( stk.empty( ) ) {
                if (s.charAt(i) == 'a' || s.charAt(i) == 'w') {
                    stk.push(s.charAt(i));
                }
    }


若栈内不为空,则根据栈顶元素判断是否push下一个元素进栈

即:若栈顶元素为w,遍历的下一个元素为a,则将下一个元素push进栈


      else {
                char now = stk.peek();
                if (now == 'w') {
                    if (s.charAt(i) == 'a') {
                        stk.push(s.charAt(i));
                    }


若栈顶元素为w,遍历的下一个元素仍为w,则i–,否则该w将被跳过

       else {
                        if (s.charAt(i) == 'w') {
                            i--;
                        }


连续两次出现w,并执行i—后,判断此时栈的长度

若为2或3,则栈内为aw或wa或awa或waw

警告+1

若大于3,则栈内必定为重复的aw或wa

错误+1

确定当前栈内字段为警告还是错误,并为相应变量+1后

清空栈,继续遍历后续元素


if (stk.size() == 2 || stk.size() == 3) {
                            ans1++;
                        } else if (stk.size() > 3) {
                            ans2++;
                        }
                        stk.clear();
                    }
       }


当第一个元素为a时同理有

else if (now == 'a') {
                    if (s.charAt(i) == 'w') {
                        stk.push(s.charAt(i));
                    } else {
                        if (s.charAt(i) == 'a') {
                            i--;
                        }
                        if (stk.size() == 2 || stk.size() == 3) {
                            ans1++;
                        } else if (stk.size() > 3) {
                            ans2++;
                        }
                        stk.clear();
                    }
                }


如果最后的字段仍为重复的aw或wa则不会增加相应的警告或错误数量,有可能会导致错误或警告的数量少一个。故需要判断最后栈内剩下的元素数。

判断最后栈内剩下的元素数,并相应增加警告或错误数


            }
        }
        if (stk.size() == 2 || stk.size() == 3) {
            ans1++;
        } else if (stk.size() > 3) {
            ans2++;
        }


最后输出要求的值,注意不要有多余输出


System.out.println(ans1);
        System.out.println(ans2);
    }
}


0.png

相关文章
|
3天前
|
算法
【算法】栈
栈相关算法题,供参考,附有链接地址及板书
|
3天前
|
算法 安全 C++
用 C++ 算法控制员工上网的软件,关键逻辑是啥?来深度解读下
在企业信息化管理中,控制员工上网的软件成为保障网络秩序与提升办公效率的关键工具。该软件基于C++语言,融合红黑树、令牌桶和滑动窗口等算法,实现网址精准过滤、流量均衡分配及异常连接监测。通过高效的数据结构与算法设计,确保企业网络资源优化配置与安全防护升级,同时尊重员工权益,助力企业数字化发展。
26 4
|
5天前
|
缓存 算法 搜索推荐
Java中的算法优化与复杂度分析
在Java开发中,理解和优化算法的时间复杂度和空间复杂度是提升程序性能的关键。通过合理选择数据结构、避免重复计算、应用分治法等策略,可以显著提高算法效率。在实际开发中,应该根据具体需求和场景,选择合适的优化方法,从而编写出高效、可靠的代码。
19 6
|
28天前
|
存储 算法 程序员
C 语言递归算法:以简洁代码驾驭复杂逻辑
C语言递归算法简介:通过简洁的代码实现复杂的逻辑处理,递归函数自我调用解决分层问题,高效而优雅。适用于树形结构遍历、数学计算等领域。
|
29天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
62 1
|
1月前
|
算法
分享一些提高二叉树遍历算法效率的代码示例
这只是简单的示例代码,实际应用中可能还需要根据具体需求进行更多的优化和处理。你可以根据自己的需求对代码进行修改和扩展。
|
1月前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
1月前
|
存储 缓存 算法
如何提高二叉树遍历算法的效率?
选择合适的遍历算法,如按层次遍历树时使用广度优先搜索(BFS),中序遍历二叉搜索树以获得有序序列。优化数据结构,如使用线索二叉树减少空指针判断,自定义节点类增加辅助信息。利用递归与非递归的特点,避免栈溢出问题。多线程并行遍历提高速度,注意线程安全。缓存中间结果,避免重复计算。预先计算并存储信息,提高遍历效率。综合运用这些方法,提高二叉树遍历算法的效率。
64 5
|
2月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
91 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
1月前
|
算法
树的遍历算法有哪些?
不同的遍历算法适用于不同的应用场景。深度优先搜索常用于搜索、路径查找等问题;广度优先搜索则在图的最短路径、层次相关的问题中较为常用;而二叉搜索树的遍历在数据排序、查找等方面有重要应用。
39 2

热门文章

最新文章