31.第一个只出现一次的字符位置

第一个只出现一次的字符位置

题目描述

在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置。若为空串,返回-1。位置索引从0开始

虽说C++的string类用起来超爽,但是和平时的使用习惯不同,我更喜欢原滋原味的C风格字符。这道题我写了两个版本,一个是C++风格的string,另一个是C风格字符串。

注意,C风格字符串中判断是否到达字符串末尾的两种方法:

*p != '\0'
*p != 0

本质上是一回事。

string版:

#include "stdafx.h"
#include <string>
#include<iostream>
using namespace::std;
class Solution {
public:
	int FirstNotRepeatingChar(string str) {
		if (str.empty()) return -1;

		int arr[256] = { 0 };
		int length = str.length();
		for (int i = 0; i < length; i++){
			arr[(int)str[i]]++;
			std::cout << (int)str[i] << endl;
		}
		int retVal = 0;
		for (int i = 0; i < length; i++){
			if (arr[(int)str[i]] == 1)
				break;
			retVal++;
		}
		if (retVal == str.length()){
			retVal = -1;
		}
		return retVal;
	}
};
int _tmain(int argc, _TCHAR* argv[])
{
	Solution s;
	string test = "asdfasdfe";
	int result = s.FirstNotRepeatingChar(test);
	return 0;
}

C风格字符串版:

#include "stdafx.h"
#include <string>
#include<iostream>
using namespace::std;
class Solution {
public:
	int FirstNotRepeatingChar(string str) {
		if (str.empty()) return -1;

		const char* p = str.data();
		int strLength = 0;
		int arr[256] = { 0 };
		while (*p != '\0'){
			arr[*p]++;
			p++;
			strLength++;
		}
		const char* p2 = str.c_str();
		int retVal = 0;
		while (*p2 != '\0'){
			if (arr[*p2] == 1)
				break;
			p2++; retVal++;
		}
		if (retVal == strLength){
			retVal = -1;
		}
		return retVal;
	}
};
int _tmain(int argc, _TCHAR* argv[])
{
	Solution s;
	string test = "asdfasdfe";
	int result = s.FirstNotRepeatingChar(test);
	return 0;
}

说说这里面的坑:

string有两个函数可以转C风格字符串,一个是c_str(),另一个是data(),效果似乎相同,都会在字符串结尾补上‘\0‘,关键是两个函数的返回值都是const char*指针

const char* p = str.data();

写成

char* p = str.data();

是通不过编译的。

时间: 2024-10-09 21:10:38

31.第一个只出现一次的字符位置的相关文章

第一个只出现一次的字符位置-剑指Offer

第一个只出现一次的字符位置 题目描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置.若为空串,返回-1.位置索引从0开始 思路 每个字符都做对比的时间复杂度为O(n2),所以我们创建一个哈希表来存储每个字符对应的出现次数,扫描一次存储次数,扫描第二次找出第一个只出现一次的字符,时间复杂度O(n) 牺牲空间换取时间,哈希表查找的时间为O(1) 注意:最后没有符合这样条件的字符的情况 代码 public class Solution { publ

时间空间效率的平衡:第一个只出现一次的字符位置

在一个字符串(1<=字符串长度<=10000,全部由大小写字母组成)中找到第一个只出现一次的字符,并返回它的位置 import java.util.LinkedHashMap; public class Solution { public int FirstNotRepeatingChar(String str) { LinkedHashMap<Character, Integer> map = new LinkedHashMap<Character, Integer>

第一个只出现一次的字符位置

题目描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置.若为空串,返回-1.位置索引从0开始 1 class Solution { 2 public: 3 int FirstNotRepeatingChar(string str) { 4 int len = str.length(); 5 if (len == 0) 6 { 7 return -1; 8 } 9 map<char,int> mm; 10 for (int i =

【剑指Offer】第一个只出现一次的字符位置

问题描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置.若为空串,返回-1.位置索引从0开始. 示例: 输入:sabcdsdf 输出:1 算法描述 定义一个52个元素的整型数组aCount,初始化为0,每个字母(大小写)依次对应一个,记录字母出现的次数: 定义一个52个元素的整型数组aPos,初始化为-1,每个字母(大小写)对应一个,记录字母第一次出现的位置: 每次遍历一个到字母,aCount数组里对应字母加1,判断目前aCount数组里该字

《剑指offer》第一个只出现一次的字符位置

[ 声明:版权所有,转载请标明出处,请勿用于商业用途.  联系信箱:[email protected]] 题目链接:http://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c?rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出

剑指offer(三十八)之第一个只出现一次的字符位置

题目描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置.若为空串,返回-1.位置索引从0开始 思路分析: 1.先把字符串存到字节数组当中 2.设置一个标志位,再用两个FOR循环 <span style="font-family:SimSun;font-size:24px;">public class Solution { public int FirstNotRepeatingChar(String str)

剑指Offer - 第一个只出现一次的字符位置

https://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c?tpId=13&tqId=11187&tPage=2&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置 代码

17.在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b

转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4261992.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目:在一个字符串中找到第一个只出现一次的字符.如输入abaccdeff,则输出b . 题目分析: 求字符串的某个字符出现的次数可以很巧妙的运用split("字符&

java实现——035第一个只出现一次的字符

1 import java.util.Hashtable; 2 3 public class T035 { 4 public static void main(String[] args) { 5 FirstNotRepeatingChar("abaccdeff"); 6 } 7 8 public static char FirstNotRepeatingChar(String pString) { 9 Hashtable t = new Hashtable(); 10 int tab