这篇文章主要介绍“如何返回第一个找到符合条件的字符”,在日常操作中,相信很多人在如何返回第一个找到符合条件的字符问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何返回第一个找到符合条件的字符”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
针对给定的一个字符串 s,你需要写一个算法,返回给定字符串中不重复字符。
这个题目在随后的面试中又出来变种。
这次需要函数返回的找到的字符串,同时输入的字符串中还有大小写。
另外,因为在线编译器的限制,你又不能使用 HashMap。
使用 Java 来说还是相对比较好处理的。
解题思路也比较简单,你需要使用一个中间变量来存储,首先还是需要将进行处理的字符串转换为 char 的数组。
然后在数组中拿到第一个字符。
当你拿到第一个字符的时候,你做这样一件事情,将这个字符对目标字符串进行替换为 “”;
如果有相同的,那么肯定会被替换掉,同时你再考虑替换掉一次大写的,一次小写的。
如果有大写字母相同的,那么也会被替换掉。
例如字符串 “serTSSEr”,那么你在完成后上面的算法后,假设我们对比第一个要替换的字符是 s,那么完成后算法后的字符串为 “erTEr”。
我们发现字符串的长度就不是原始长度 -1 了,因为你替换了多个字符串,因此可以知道这个被查找的字符是重复的。
当我们循环到字符 T 的时候,我们会发现完成后算法后的字符串长度就是原始输入字符串长度 -1,那么我们就知道 T 就是我们需要输出的字符了。
需要注意的是特殊情况 “ssee” 这种情况,如果你循环到最后,可能会发现原始字符的长度和完成整个循环后字符的长度没有变化,那么说明所有的字符都有重复,那么你应该返回 “”。
为了减少搜索次数,你可以在完成后第一次替换后的余下的字符串中进行算法查找和替换,因为这个算法值需要找到字符,并不需要你输出下标。
因此在循环中,下次需要查找的字符串长度就减少了,算法的效率也就更高了。
完整测试代码,请参考题目中的 GitHub 链接地址:https://github.com/cwiki-us-docs/java-tutorials/blob/master/toolkits/codebank/src/test/java/com/ossez/toolkits/codebank/tests/leetcode/LeetCode0387FirstUniqueCharacterTest.java
我们这里将这个测试方法写在下面供需要的童鞋参考。
/** * Return the first Uniq Char String without using Map * @param data * @return */ private String firstUniqCharString(String data) { // NULL CHECK if (data.equals("")) { return ""; } char[] strArray = data.toCharArray(); String retStr = ""; if (data.length() == 1) { retStr = data; } for (int i = 0; i < strArray.length; i++) { String valStr = Character.toString(strArray[i]); String rData = data; rData = data.replace(valStr, ""); rData = rData.replace(valStr.toUpperCase(Locale.ROOT), ""); rData = rData.replace(valStr.toLowerCase(Locale.ROOT), ""); if (rData.length() == 0) { retStr = ""; } else if (rData.length() + 1 == data.length()) { retStr = valStr; break; } } return retStr; }
到此,关于“如何返回第一个找到符合条件的字符”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。