1.什么是自顶向下的变成方法
说白了就是先总体后局部的编写方法,就是编写程序的视角从整体的宏观性逐层进入具体的微惯性的一种编程思想。我们在刚开始的时候不需要将所有的业务考虑的那么详细,我们需要将我们所处理的业务分为几大模块,按几大步走,然后再对每一个模块进行逐级的细分。这样使得我们编程中的思路更清晰,代码阅读更加容易,方便后期维护,因为代码的编写过程是自顶向下逐层细化的,我们在可以在编码的早期就形成了一个可以被单元测试的函数。这很符合测试框架的流程——测试框架不关心程序内部是如何实现的,只要能够根据传入的参数返回正确的结果即可。同理,我们早期在尚未真正实现底层函数时,可以通过mock或硬编码的形式,让单元测试得以通过,更早的将主方法或类放到单元测试的保护之下,再真正实现过程中,就可以更加游刃有余。
2.实例分析
力扣算法题:
给定一个字符串,验证它是否是回文串,只考虑字母和数字,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
实例1:
输入:“A man, a plan, a canal : Panama”
输出:true
实例2:
输出:“race a car”
输出:false
这道题的解题思路我觉得可以分为两大步走:1.提出字符串中的字母和数字;2.将字符串进行左右对调
public class Solution {
public boolean isPalindrome (String s) {
String filteredS = _filterOnlyHaveNumberAndChar(s);
String reversedS = _reverseString(filteredS);
return reversedS.equalsIgnoreCase(filteredS);
}
private String _reverseString(String filteredS) {
return null;
}
private String _filterOnlyHaveNumberAndChar(String s) {
return null;
}
}
上面已经将主干逻辑捋顺了,下面是对两步进行具体的代码实现
- 提出字符串中的字母和数字
private String _filterOnlyHaveNumberAndChar(String s) {
return s.replaceAll("[^A-Za-z0-9]","");
}
- 将字符串进行左右对调
private String _reverseString(String s) {
return new StringBuilder(s).reverse().toString();
}
最后再将代码进行整理
public class Solution {
public boolean isPalindrome (String s) {
String filteredS = _filterOnlyHaveNumberAndChar(s);
return _reverseString(filteredS).equalsIgnoreCase(filteredS);
}
private String _reverseString(String s) {
return new StringBuilder(s).reverse().toString();
}
private String _filterOnlyHaveNumberAndChar(String s) {
return s.replaceAll("[^A-Za-z0-9]","");
}
}
|