我经常通过练习Kata来提高编程能力。我发现这种方法对提高我的开发技能、编码效率和最重要的算法思维非常有效。
Kata练习加强了最佳实践,培养了快速思考的能力。在我看来,持续的练习可以建立一定的记忆模式和技能,使编码过程更快、更直观。
我在codewars中.在com网站上发现这些挑战的,强烈推荐这个平台。
直接看例子,不需要太多的解释:
- 输入 "rqaezty",输出 "r-qq-aaa-eee-eee-zzzzzz-tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttyyyyyy"
- 输入 "cwat",输出 "c-ww-aaa-tttt"
我的解决方案如下:
import java.util.stream.Collectors; import java.util.stream.IntStream; public class Accumul { public static String accum(final String text) { if (text == null) { throw new IllegalArgumentException(); } return IntStream.range(0, text.length()) .mapToObj(i -> singleCharToWord(text.charAt(i), i)) .collect(Collectors.joining("-")); } private static String singleCharToWord(final char charAt, final int index) { return String.valueOf(charAt).toUpperCase() + IntStream.range(1, index + 1) .mapToObj(i -> String.valueOf(charAt).toLowerCase()) .collect(Collectors.joining()); } }
测试用例:
public class AccumulTest { @Test public void testWhenGivenNullAsInput() { assertThrows(IllegalArgumentException.class, () -> { Accumul.accum(null); }); } @Test public void test() { assertEquals("", Accumul.accum("")); assertEquals("A", Accumul.accum("a")); assertEquals("A-Bb", Accumul.accum("ab")); assertEquals("Z-Pp-Ggg-Llll-Nnnnn-Rrrrrr-Xxxxxxx-Qqqqqqqq-Eeeeeeeee-Nnnnnnnnnn-Uuuuuuuuuuu", Accumul.accum("ZpglnRxqenU")); assertEquals("N-Yy-Fff-Ffff-Sssss-Gggggg-Eeeeeee-Yyyyyyyy-Yyyyyyyyy-Llllllllll-Bbbbbbbbbbb", Accumul.accum("NyffsGeyylB")); assertEquals("M-Jj-Ttt-Kkkk-Uuuuu-Bbbbbb-Ooooooo-Vvvvvvvv-Qqqqqqqqq-Rrrrrrrrrr-Uuuuuuuuuuu", Accumul.accum("MjtkuBovqrU")); assertEquals("E-Vv-Iii-Dddd-Jjjjj-Uuuuuu-Nnnnnnn-Oooooooo-Kkkkkkkkk-Mmmmmmmmmm-Mmmmmmmmmmm", Accumul.accum("EvidjUnokmM")); assertEquals("H-Bb-Iii-Dddd-Eeeee-Vvvvvv-Bbbbbbb-Xxxxxxxx-Nnnnnnnnn-Cccccccccc-Ccccccccccc", Accumul.accum("HbideVbxncC")); } }
以上就是全部内容。谢谢你的阅读!
以上是挑战一词 - 请关注图灵教育的其他相关文章!