算法练习——(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

相关文章
|
13天前
|
算法
分享一些提高二叉树遍历算法效率的代码示例
这只是简单的示例代码,实际应用中可能还需要根据具体需求进行更多的优化和处理。你可以根据自己的需求对代码进行修改和扩展。
|
17天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
16天前
|
存储 缓存 算法
如何提高二叉树遍历算法的效率?
选择合适的遍历算法,如按层次遍历树时使用广度优先搜索(BFS),中序遍历二叉搜索树以获得有序序列。优化数据结构,如使用线索二叉树减少空指针判断,自定义节点类增加辅助信息。利用递归与非递归的特点,避免栈溢出问题。多线程并行遍历提高速度,注意线程安全。缓存中间结果,避免重复计算。预先计算并存储信息,提高遍历效率。综合运用这些方法,提高二叉树遍历算法的效率。
38 5
|
16天前
|
算法
树的遍历算法有哪些?
不同的遍历算法适用于不同的应用场景。深度优先搜索常用于搜索、路径查找等问题;广度优先搜索则在图的最短路径、层次相关的问题中较为常用;而二叉搜索树的遍历在数据排序、查找等方面有重要应用。
22 2
|
1月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
68 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
19天前
|
机器学习/深度学习 JSON 算法
二叉树遍历算法的应用场景有哪些?
【10月更文挑战第29天】二叉树遍历算法作为一种基础而重要的算法,在许多领域都有着不可或缺的应用,它为解决各种复杂的问题提供了有效的手段和思路。随着计算机科学的不断发展,二叉树遍历算法也在不断地被优化和扩展,以适应新的应用场景和需求。
24 0
|
1月前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
31 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
24天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
28天前
|
并行计算 算法 IDE
【灵码助力Cuda算法分析】分析共享内存的矩阵乘法优化
本文介绍了如何利用通义灵码在Visual Studio 2022中对基于CUDA的共享内存矩阵乘法优化代码进行深入分析。文章从整体程序结构入手,逐步深入到线程调度、矩阵分块、循环展开等关键细节,最后通过带入具体值的方式进一步解析复杂循环逻辑,展示了通义灵码在辅助理解和优化CUDA编程中的强大功能。
|
1月前
|
算法
PID算法原理分析
【10月更文挑战第12天】PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。
下一篇
无影云桌面