开发工具分享
  • 首页
  • 计算科学
  • 文化旅游
  • 项目和网站
    • OSSEZ 计算技术
    • USRealEstate 社区
    • 地区文化
    • CWIKI.US
    • BUG.OSSEZ.COM
    • RSS.OSSEZ.COM
CWIKIUS.CN
一个有独立思考和温度的清新站
  1. Home
  2. Computer Science
  3. This article

First Unique Character in a String 的变种问题返回第一个找到符合条件的字符

2021年04月30日 641Browse 0Like 0Comments

问题描述

下面是有关这个问题的描述部分。

英文

Given a string s, return the first non-repeating character in it and return its index. If it does not exist, return -1.

中文

针对给定的一个字符串 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

array-01

我们这里将这个测试方法写在下面供需要的童鞋参考。

/**
 * 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;
}

https://www.ossez.com/t/first-unique-character-in-a-string/13448/2

Tags: None
Last updated:2021年04月30日

HoneyMoose

有温度的人文和独立的思考

Like
< Previous
Next >

Comments

Cancel reply

Archives
  • May 2026
  • April 2026
  • March 2026
  • February 2026
  • January 2026
  • December 2025
  • November 2025
  • October 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
Categories
  • Computer Science (2,362)
    • Confluence (663)
    • Gradle (12)
  • U.S. (482)
  • 文化旅游 (145)

COPYRIGHT © 2020 CWIKIUS. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

湘ICP备2020018253号-1