首页 > 试题广场 >

落单字符

[编程题]落单字符
  • 热度指数:1010 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定字符串,请帮小虾米找出最后一个只出现一次的字符。
示例1

输入

"shopee"

输出

"p"

function lastUniqueChar( str ) {
    if(!str) return "";
    //uniques数组按序存放str中只出现一次的字符
    var uniques=[];
    var strLen=str.length;
    for(let i=0;i<strLen;i++){
        if(str.indexOf(str[i])===str.lastIndexOf(str[i])){
            uniques.push(str[i]);
        }
    }
    //一定不要漏掉全都是重复出现的字符的情况
    if(uniques.length===0)
        return "";
    else
        return uniques[uniques.length-1];
}
module.exports = {
    lastUniqueChar : lastUniqueChar
};


编辑于 2021-08-27 20:06:06 回复(0)
function lastUniqueChar(str) {
        var obj = {}
        for(let i=0;i<str.length;i++){
            !obj[str[i]] ? obj[str[i]]=1 : obj[str[i]]++;
        }
        var result = ''
        for(let k in obj){
            if(obj[k]==1){
                result = k
            }
        }
        return result;
    }

发表于 2022-03-12 20:04:12 回复(0)
无脑wordcount,然后找到最后一个计数为1的字符
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 给定两个无序数组arr1和arr2,返回一个新的数组arr3,arr3里面的元素同时出现在arr1和arr2里面,而且要求arr3是正序的并且不包含重复值。
     * @param str string字符串 无序数组1
     * @return string字符串
     */
    public String lastUniqueChar (String str) {
        // write code here
        HashMap<Character, Integer> counter = new HashMap<>();
        for(int i = 0; i < str.length(); i++){
            char c = str.charAt(i);
            counter.put(c, counter.getOrDefault(c, 0) + 1);
        }
        for(int i = str.length() - 1; i >= 0; i--)
            if(counter.get(str.charAt(i)) == 1) return "" + str.charAt(i);
        return "";
    }
}

发表于 2021-09-24 15:48:30 回复(0)
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 给定两个无序数组arr1和arr2,返回一个新的数组arr3,arr3里面的元素同时出现在arr1和arr2里面,而且要求arr3是正序的并且不包含重复值。
 * @param str string字符串 无序数组1
 * @return string字符串
 */
function lastUniqueChar( str ) {
    // write code here
    if(str.length<1){
        return "";
    }
    let s = str.split("");
    let myMap = new Map();
    for(let i = 0;i < s.length;i++){
        if(myMap.has(s[i])){
            myMap.set(s[i],"");
        }else{
            myMap.set(s[i],i);
        }
    }
    let max = 0;
    let result = 0;
    myMap.forEach((value,key)=>{
        if(value != ""){
            max = Math.max(max,value);
        }else{
            result++;
        }
    })
    if(result==s.length/2){
        return "";
    }else{
        return s[max];
    }
   
}
module.exports = {
    lastUniqueChar : lastUniqueChar
};
想知道哪里漏了
发表于 2022-08-02 16:39:39 回复(0)
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 给定两个无序数组arr1和arr2,返回一个新的数组arr3,arr3里面的元素同时出现在arr1和arr2里面,而且要求arr3是正序的并且不包含重复值。
 * @param str string字符串 无序数组1
 * @return string字符串
 */
function lastUniqueChar( str ) {
    // write code here
    let n = str.length
    let map = new Map()
    for(let j = n - 1; j >= 0; j --){
        let s = str[j]
        if(map.has(s)) continue
        map.set(s,1)
        if(str.indexOf(s) === j) return s
    }
    return ''
}
module.exports = {
    lastUniqueChar : lastUniqueChar
};

发表于 2022-05-30 11:29:46 回复(0)
function lastUniqueChar( str ) {
  // write code here
  if(str.length === 0 || str.length === 1) return str;
  let i = str.length - 1;
  while(i > -1) {
    let k = i;
    while(str[k] === str[k - 1]) {
      k--;
    }

    if (k === i && (!str.slice(0, k).concat(str.slice(k + 1)).includes(str[i]))) {
      return str[i]
    }
    i = k - 1;
  }
  return ''
}


发表于 2022-05-21 19:58:24 回复(0)
哈希表记录出现次数 倒叙遍历哈希表key
class Solution:
    def lastUniqueChar(self , str ):
        # write code here
        if str=='': return ''
        if len(str)==1: return str
        data={}
        keys=[]
        for ch in str:
            data[ch]=0
        for ch in str:
            data[ch]+=1
        for key in data:
            keys.append(key)
        print(keys,data)
        for i in range(len(keys)-1,-1,-1):
            if data[keys[i]]==1: return keys[i]
            elif i==0: return ''


发表于 2022-04-19 11:22:45 回复(0)
function lastUniqueChar(str) {
  let char = "";
  const hash = new Map();
  for (const item of str) {
    !hash.has(item) ? hash.set(item, 1) : hash.set(item, hash.get(item) + 1);
  }
  hash.forEach((val, key) => {
    if (val === 1) {
      char = key;
    }
  });
  return char;
}

发表于 2022-03-11 17:24:26 回复(0)
function lastUniqueChar( str ) {
    // write code here
     var obj={};
    for(let i=0;i<str.length;i++){
        !obj[str[i]] ? obj[str[i]]=1 : obj[str[i]]++;
    }
    var ch='';
    for(let k in obj){
        if(obj[k]==1){
            ch=k;
        }
    }
    return ch;
}

发表于 2022-03-05 23:18:01 回复(0)
function findLastOnlyOccurredOnceChar(str){
    if(!str||str==='')
        return str;
    let [map1,map2] = [new Map(),new Map()];
    str.split('').forEach(s=>{
        if(!map1.has(s)){
            map1.set(s,true);
        }else if(!map2.has(s)){
            map2.set(s,true);
        }
    });
    let lastIndex = -1;
    for(let char of map1.keys()){
        if(!map2.has(char))
            lastIndex = Math.max(lastIndex,str.lastIndexOf(char));
    }
    return str.charAt(lastIndex);
}

发表于 2022-02-16 16:11:20 回复(0)
function lastUniqueChar( str ) {
    if(!str)return ''
    let onlyIndex=0
    for(let i=0;i<str.length;i++){
        if((str.indexOf(str[i])===str.lastIndexOf(str[i]))&&(i>onlyIndex))
        {
            onlyIndex=i
        }
    }
    return str.indexOf(str[onlyIndex])===str.lastIndexOf(str[onlyIndex])?str[onlyIndex]:''
}
module.exports = {
    lastUniqueChar : lastUniqueChar
};
发表于 2021-09-23 21:48:10 回复(0)
function lastUniqueChar( str ) {
    // write code here
    const map=new Map();
    for(const s of str){
        if(!map.has(s)){
            map.set(s,1);
        }else{
            map.set(s,map.get(s)+1);
        }
    }
    let res="";
    for(const [k,v] of map){
        if(v===1){
            res=k;
        }
    }
    return res;
}

发表于 2021-09-04 17:03:52 回复(0)
function lastUniqueChar( str ) {
    // write code here
    if(str == "") {
        return ""
    }
    for(let i = str.length - 1; i >= 0; i--) {
        let times = 0;
        for(let j = 0; j < str.length; j++) {
            times = str[i] == str[j] ? times + 1 : times;
        }
        if(times == 1) {
            return str[i];
        }
    }
    return "";
}

发表于 2021-08-30 21:35:05 回复(1)
char* lastUniqueChar(char* str ) {
    int i;
    char *j;
    char *m;
    char *n;
    //空字符串的特殊情况
    if(str[0]==0)
        return str;
    else//一般情况
    {
        for(i=strlen(str)-1;i>=0;i--)
        {
            m=strchr(str, str[i]);//查找字符str[i]第一次出现的位置,返回char*
            n=strrchr(str, str[i]);//逆向查找
            if(m==&str[i]&&n==&str[i])
            {
                //两边查找到相同地址
                j=&str[i];
                *(j+1)='\0';
                return j;
            }
        }
        //不存在单独字符的特殊情况
        m[0]='\0';
        j=&m[0];
        *(j+1)='\0';
        return j;
    }
}

还是c的写法
发表于 2021-08-28 16:35:21 回复(0)
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 给定两个无序数组arr1和arr2,返回一个新的数组arr3,arr3里面的元素同时出现在arr1和arr2里面,而且要求arr3是正序的并且不包含重复值。
     * @param str string字符串 无序数组1
     * @return string字符串
     */
    string lastUniqueChar(string str) {
        reverse(str.begin(), str.end());
        string ans;
        int n=str.size();
        for(int i=0;i<n;++i){
            if (str.substr(i+1).find(str[i])==string::npos)
            {
                ans=str[i];
                break;
            }
            else{
                str+=str[i];
            }
        }
        return ans;
    }
};


发表于 2021-08-27 16:14:13 回复(0)
function lastUniqueChar(str) {
        let arr = str.split("");
        let map = new Map();

        for (let i = 0; i < arr.length; i++) {
          if (!map.has(arr[i])) {
            map.set(arr[i], 1);
          } else {
            map.set(arr[i], map.get(arr[i]) + 1);
          }
        }

        let entries = [...map].reverse();

        // console.log(entries);
        for (let i = 0; i < entries.length; i++) {
          if (entries[i][1] === 1) return entries[i][0];
        }
        return "";
      }

发表于 2021-08-26 00:03:51 回复(0)